1.初期化されたポインタとして使用します
int main(void){
//使用未初始化的指针
int *p;
printf("*p value: 0X%p\n",*p);
return 0;
}
2.値をアドレスとしてポインタに割り当てます
int main(void){
int *p;
int val = 10;
//将值赋给指针
p = val;
return 0;
}
3.逆参照を忘れて、メモリに直接アクセスします
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.再度使用して、再割り当てを無視します
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;
}
原因:pには、文字列 "0 \"の7番目の端にある配列要素を指すポインタがあります。
入力が元のコンテンツの長さより短い場合は次回印刷するか、ポインタpが末尾を指すため、次のことができます。印刷されない
入力されたコンテンツの長さが元より大きく、印刷内容も誤って表示されている場合
解決策:ループのたびにポインターを再初期化します
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;
}