指針在用要註意初始化,例如:
int *p;
p為指針,地址是未知的,如果直接賦值
*p=a;這樣編譯可以通過,但是會產生警告,p的地址是隨機分配的,這樣對未知的地址賦值很危險,可能會覆蓋掉某些重要數據,所以避免這種危險,在定義指針時註意初始化,也就是賦值。
可以int *p=&a;
或者int *p;
p=&a;
然後再對p進行操作
有錯。
註意大小寫,還有
int a=9;
int *p;
p=&a;//這個是指針指向a
*p=8;
這樣就對了。
擴展資料:
指針的賦值
int *p;
int a;
int b[1];
p = &a;?
p = b;?
指針的賦值,“=”的左操作數能夠是*p,也能夠是p。
當“=”的左操作數是*p時,改變的是p所指向的地址存放的數據;
當“=”的左操作數是p時,改變的是p所指向的地址。
數組的變量名b表示該數組的首地址,因此p=b;也是正確的
同類型的指針賦值:
int val1 = 18,val2 = 19;
int *p1,*p2;
p1 = &val1;
p2 = &val2;
p1 = p2; ? //註意啦,p1指向了val2,而沒有指向val1
備註:字符串與指針的初始化和賦值
初始化:
char *cp = "abcdefg"; //這個初始化過程,是將指針cp指向字符串的首地址,而並非傳遞字符串的值。由於,在C語言裏面,沒有總體處理壹個字符串的機制
賦值:
cp = "abcdefg";
*cp=”abcdefg” ;//錯誤!字符串常量傳遞的是它的首地址,不能夠通過*cp改動該字符串的值,由於該字符串為常量,而它僅僅是簡單的將指針指向該字符串常量。