首頁  >  問答  >  主體

c++ - 关于C语言char*指针的问题

代码如下:

#include<stdio.h>

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

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

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

PHPzPHPz2765 天前888

全部回覆(6)我來回復

  • ringa_lee

    ringa_lee2017-04-17 15:27:53

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

    回覆
    0
  • 大家讲道理

    大家讲道理2017-04-17 15:27:53

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

    回覆
    0
  • 巴扎黑

    巴扎黑2017-04-17 15:27:53

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

    回覆
    0
  • 高洛峰

    高洛峰2017-04-17 15:27:53

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

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 15:27:53

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

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

    回覆
    0
  • 迷茫

    迷茫2017-04-17 15:27:53

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

    回覆
    0
  • 取消回覆