代码如下:
#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 の文字列は null 文字で終わる文字配列です。
その場合、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
アドレスを取得します。 *
を追加すると、このアドレスに格納されている値を取得できます。