1. Usar como puntero inicializado
int main(void){
//使用未初始化的指针
int *p;
printf("*p value: 0X%p\n",*p);
return 0;
}
2. Asignar el valor al puntero como dirección
int main(void){
int *p;
int val = 10;
//将值赋给指针
p = val;
return 0;
}
3. Olvídese de desreferenciar y acceder directamente a la memoria
int main(void){
int arr[10];
int *p1,*p2;
p1 = &arr[0];
p2 = &arr[1];
//判断数组两个元素的大小
if(p1>p2){
//内容永远不会被执行,因为比较的p1和p2的地址大小,p1永远小于p2
}
return 0;
}
4. Úselo de nuevo para ignorar la reasignación.
int main(void){
char arr[10];
char *p;
p = arr;
do{
gets(arr); //控制台获取一组字符
while(*p){
printf("arr's value: %c\n",*p++);
}
}while(strcmp(arr,"done")!=0);
return 0;
}
Causa: p tiene punteros que apuntan a los elementos de la matriz en el séptimo extremo de la cadena "0 \", la próxima vez que imprima,
si la entrada es menor que la longitud del contenido original, o el puntero p apunta a las terminaciones y, por lo tanto, puede no imprimir
si la longitud del contenido de entrada es mayor que el original y el contenido impreso también se muestra incorrectamente
Solución: reinicialice el puntero cada vez que el bucle
int main(void){
char arr[10];
char *p;
// p = arr;
do{
gets(arr); //控制台获取一组字符
p = arr; //每次循环进行初始化操作
while(*p){
printf("arr's value: %c\n",*p++);
}
}while(strcmp(arr,"done")!=0);
return 0;
}