ホームページ  >  に質問  >  本文

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

代码如下:

#include<stdio.h>

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

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

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

PHPzPHPz2765日前886

全員に返信(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 の文字列は null 文字で終わる文字配列です。
    その場合、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

    「*」を追加せずに、配列の添字を使用して最初の文字を出力することもできます。

    リーリー

    返事
    0
  • 迷茫

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

    p は、要素を指すアドレスを格納します。 を追加しない場合は、 を指す要素になります。

    返事
    0
  • キャンセル返事