C語言指針常見錯誤,主要有兩種情況:
1).指針未初始化;
2).避免使用scanf
給指針賦值;
3).賦值指針為NULL
。
指針未初始化
這種情況:
int i = 10, *p;
*p = i;
printf("*i=%d\n", *p);
指針變量p
是沒有初始化的,就是你還沒有給他里面賦值地址進去。這種為初始化的情況在高版本的 VS 中是直接編譯不過去的;會報錯:C4700 使用了未初始化的局部變量“p”
。
避免 scanf
賦值指針
int i = 10, *p;
p = &i; // 初始化 p,指向 i
scanf("%d", p);
這種情況會很容易把原來的i
值,或者指向其他內存位置的值改掉導致軟件崩潰,需要謹慎。
賦值指針為NULL
int i = 10, *p = NULL;
*p = i;
printf("%d", *p);
這種情況能編譯通過,運行時會報段錯誤:引發了異常: 寫入訪問權限沖突。 p 是 nullptr
。需要特別注意。