【C語言】基本指標型別及其常見錯誤
阿新 • • 發佈:2021-10-16
C語言基本指標型別及其常見錯誤
一、基本型別指標及其常見錯誤
可能導致記憶體洩露,或野指標
錯誤一:
#include <stdio.h>
int main(vodi)
{
int * p;
int i = 5;
*p = i; //error,無語法錯誤,*p指的是本程式以外的地址單元,本程式無權更改
printf("%d\n",*p);
return 0;
}
錯誤二:
#include <stdio.h> int main(void) { int i = 5; int * p; int * q; p = &i; *q = p; // error,有語法錯誤,p是指標,*p是int型變數,二者型別不同 printf("%d\n",*q); return 0; }
錯誤三:
#include <stdio.h>
int main(void)
{
int i = 5;
int * p;
int * q;
p = &i;
// *q = p; //error 語法編譯會出錯,p存放i的地址,*p指普通變數,二者不同
// *q = *p; // error 語法無錯
printf("%d\n",*q);
return 0;
}
錯誤四:
#include <stdio.h> int main(void) { int i = 5; int * p; int * q; p = &i; // *q = p; //error 語法編譯會出錯,p存放i的地址,*p指普通變數,二者不同 // *q = *p; // error 語法無錯 p = q; // q是垃圾值,q賦給p,p也變為垃圾值 printf("%d\n",*q); /* q的空間是屬於本程式的,所以本程式可以讀寫q的內容, 但是如果q內部是垃圾值,則本程式不能讀寫*q的內容 因為此時*q所代表的記憶體單元的控制權限並沒有分配給本程式 所有本程式執行到13行時,就會立即出錯 */ return 0; }
二、星號的三種含義
-
乘法
-
定義指標變數
-
指標運算子
放在定義好的指標變數的前面,*p表示以p的內容為指標的變數
三、通過指標為什麼可以是被調函式修改主調函式
#include <stdio.h>
int f(int i,int j)
{
return 100;
return 88; //88無法返回
}
int main(void)
{
int a = 3,b = 5;
a = f(a,b);
b = f(a,b); //呼叫2次才可以修改b的值
}
#include <stido.h> void g(int *p,int *q) { *p = 1; *q = 2; } int main(void) { int a = 3,b = 5; g(&a,&b); print("%d %d\n",a,b); return 0; }
四、如何通過被調函式修改主調函式普通變數的值
- 實參必須為改普通變數的地址
- 形參必須為指標變數
- 在被調函式中通過( *形參名 = ...)的方式可以修改主調函式相關變數的值
------------------------------------------------
本文作者:ZyNu11,轉載請註明原文連結:https://www.cnblogs.com/zynu11/p/15413069.html