代码如下:
#include<stdio.h> int main(void) { char* p = "xxx"; printf("%c",*p); return 0; }
为啥一定要加*号才能正确显示字符串的第一个字符呢?不是p指针存了这个字符串了吗?本人刚学C没多久,请大神们解析得仔细点,谢谢
学习是最好的投资!
首先呢,建議你用編輯器調試,在printf這一行打個斷點,然後再監視器裡看p和*p分別指向什麼。 然後,p是字元指標類型,指向的是一個字元陣列首元素的位址,*p取p指向的值,也就是第一個元素。 如果明白了,你可以思考下 p++,*p++的結果是什麼,運算之後p的值是多少
首先, C 裡沒有字串這種類型, C 中的字串是以空字元結尾的字元陣列.然後, 這個p 指標保存的不是這個字串, 而是這個字元陣列的首元素的位址.所以就可以用間接運算子* 讀出這個位址裡面的值, 也就是這個字元陣列的第一個元素.
因為這裡的p的類型是一個指針,字符串xxx存儲在它指向的內存地址中,直接使用p的話輸出的是p指向的內存地址,前面加一個*就是輸出這個指標指向的內容。
p
首先呢,p是一個指標類型,它存的是一個位址,而這個位址是index,可以理解成是整個字串(其實並不是字串)的第一個字元的位址,類似數組中的第一個元素。 *這個符號呢,在定義的時候是指定義一個指標變量,而在呼叫的時候,是取地址中寸的值。 printf("%c",*p);,你的這個語句,如果不加*,代表你輸出的是p的值,可是p的值是一個地址,所以你自然得不到p地址真正存著的值。加上了*,你就可以取得這個位址所存的價值了。
index
*
printf("%c",*p);
也可以不加"*"的哦,用數組下標的方式也可以輸出第一個字元
printf("%c",p[0]);
p 是一個指標類型,他儲存的是指向元素的位址,如果不加 ,則列印的為具體的位址量,加上號後是指向的元素
首先呢,建議你用編輯器調試,在printf這一行打個斷點,然後再監視器裡看p和*p分別指向什麼。
然後,p是字元指標類型,指向的是一個字元陣列首元素的位址,*p取p指向的值,也就是第一個元素。
如果明白了,你可以思考下 p++,*p++的結果是什麼,運算之後p的值是多少
首先, C 裡沒有字串這種類型, C 中的字串是以空字元結尾的字元陣列.
然後, 這個p 指標保存的不是這個字串, 而是這個字元陣列的首元素的位址.
所以就可以用間接運算子* 讀出這個位址裡面的值, 也就是這個字元陣列的第一個元素.
因為這裡的
p
的類型是一個指針,字符串xxx存儲在它指向的內存地址中,直接使用p
的話輸出的是p
指向的內存地址,前面加一個*就是輸出這個指標指向的內容。首先呢,
p
是一個指標類型,它存的是一個位址,而這個位址是index
,可以理解成是整個字串(其實並不是字串)的第一個字元的位址,類似數組中的第一個元素。*
這個符號呢,在定義的時候是指定義一個指標變量,而在呼叫的時候,是取地址中寸的值。printf("%c",*p);
,你的這個語句,如果不加*
,代表你輸出的是p
的值,可是p
的值是一個地址,所以你自然得不到p
地址真正存著的值。加上了*
,你就可以取得這個位址所存的價值了。也可以不加"*"的哦,用數組下標的方式也可以輸出第一個字元
p 是一個指標類型,他儲存的是指向元素的位址,如果不加 ,則列印的為具體的位址量,加上號後是指向的元素