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