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

代码如下:

#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 の値が何になるかを考えることができます

いいねを押す +0
大家讲道理

まず第一に、C にはそのようなタイプの文字列はありません。C の文字列は null 文字で終わる文字配列です。
その場合、p ポインタは文字列を保存するのではなく、文字列の先頭を保存します。文字配列。要素のアドレス。
したがって、間接演算子 * を使用して、この文字配列の最初の要素であるこのアドレスの値を読み取ることができます。

いいねを押す +0
巴扎黑

ここでの p の型はポインタであるため、文字列 xxx はそれが指すメモリ アドレスに格納されます。p を直接使用すると、出力は p が指すメモリ アドレスになります。このポインタが指す内容を出力するには、その前に * を付けます。

いいねを押す +0
小葫芦

まず、p はポインタ型で、アドレスを格納します。このアドレスは index で、文字列全体 (実際には文字列ではありません) の最初の文字のアドレスとして理解できます。配列の最初の要素に似ています。 *このシンボルは、ポインタ変数を定義するときにその変数を定義することを示し、呼び出されるときにアドレスの値を取得します。
printf("%c",*p);、ステートメントに * を追加しない場合、出力するのは p の値ですが、p の値はアドレスであるため、当然のことながら、実際に存在する p アドレスを取得します。 *を追加すると、このアドレスに格納されている値を取得できます。

いいねを押す +0
Ty80

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

リーリー
いいねを押す +0
迷茫

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

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート