Example 1;
int a,b,*p,*q;
*p=a;
p=&a;
p=q;
b=*p;
p=a;錯誤,因爲p實際上是一個地址,而a是一個整型值
p=*q;錯誤,因爲這句話的意思是:將地址q指向的單元的值賦給地址p。而實際上p是一個地址,是不能存值得
*p=&a;錯誤
注意,如果這樣定義了*p,那麽*p表示地址(指針)p指向的單元的值,而p表示一個地址,指針p本身只能存放它所指向的變量的地址,而不能存放變量值,*p也不是說能存放變量的值,它實際上表示一個指向變量的值或者說存儲區域,具體意義比如b=*p表示運算符*訪問以p為地址的存儲區域,但是如果是這樣*p=&a,則是錯誤的,因爲*p它指向的應該是一個存儲區域而不是一個地址。
Example 2;
char s[]="CHINA";char *p;p=s;
這個裏面,*p與s[0]相等,為什麽呢?因爲指針p是指向s[0]的,那麽*p就可以說是引用的s[0]的内容。
有一點我們要謹記,數組名所代表的就是數組最開始的一個元素的 地址。所以,在這裡,可以有p=s;而上例中的p=a則是錯誤的。
Example 3;
有以下程序:
/* strlen函数:返回字符串s的长度 */
int strlen(char *s)
{
char *p=s;
while(*p!='/0')
p++;
return p-s;
}
在这个程序里面,有一句char *p=s,这句是没有错的,这句等价于char *p;p=s;
此文是本人在学习C指针时的一点笔记。若有错误之处,还望各路人甲乙丙丁帮忙指出。