c++ - 关于C语言char*指针的问题
PHPz
PHPz 2017-04-17 15:25:53
0
6
899

代码如下:

#include<stdio.h>

int main(void)
 {
     char* p = "xxx";

    printf("%c",*p);
    return 0;
}

为啥一定要加*号才能正确显示字符串的第一个字符呢?
不是p指针存了这个字符串了吗?
本人刚学C没多久,请大神们解析得仔细点,谢谢

PHPz
PHPz

学习是最好的投资!

全部回覆(6)
左手右手慢动作

首先呢,建議你用編輯器調試,在printf這一行打個斷點,然後再監視器裡看p和*p分別指向什麼。
然後,p是字元指標類型,指向的是一個字元陣列首元素的位址,*p取p指向的值,也就是第一個元素。
如果明白了,你可以思考下 p++,*p++的結果是什麼,運算之後p的值是多少

大家讲道理

首先, C 裡沒有字串這種類型, C 中的字串是以空字元結尾的字元陣列.
然後, 這個p 指標保存的不是這個字串, 而是這個字元陣列的首元素的位址.
所以就可以用間接運算子* 讀出這個位址裡面的值, 也就是這個字元陣列的第一個元素.

巴扎黑

因為這裡的p的類型是一個指針,字符串xxx存儲在它指向的內存地址中,直接使用p的話輸出的是p指向的內存地址,前面加一個*就是輸出這個指標指向的內容。

小葫芦

首先呢,p是一個指標類型,它存的是一個位址,而這個位址是index,可以理解成是整個字串(其實並不是字串)的第一個字元的位址,類似數組中的第一個元素。 *這個符號呢,在定義的時候是指定義一個指標變量,而在呼叫的時候,是取地址中寸的值。
printf("%c",*p);,你的這個語句,如果不加*,代表你輸出的是p的值,可是p的值是一個地址,所以你自然得不到p地址真正存著的值。加上了*,你就可以取得這個位址所存的價值了。

Ty80

也可以不加"*"的哦,用數組下標的方式也可以輸出第一個字元

printf("%c",p[0]);
迷茫

p 是一個指標類型,他儲存的是指向元素的位址,如果不加 ,則列印的為具體的位址量,加上號後是指向的元素

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板