代码如下:
#include<stdio.h> int main(void) { char* p = "xxx"; printf("%c",*p); return 0; }
为啥一定要加*号才能正确显示字符串的第一个字符呢?不是p指针存了这个字符串了吗?本人刚学C没多久,请大神们解析得仔细点,谢谢
学习是最好的投资!
まず、エディタを使用してデバッグし、printf 行にブレークポイントを設定してから、モニターを見て p と *p がそれぞれ何を指しているのかを確認することをお勧めします。 p は文字ポインタ型で、文字配列の最初の要素のアドレスを指します。*p は最初の要素である p が指す値を受け取ります。 理解できれば、p++,*p++ の結果と、演算後の p の値が何になるかを考えることができます
まず第一に、C にはそのようなタイプの文字列はありません。C の文字列は null 文字で終わる文字配列です。その場合、p ポインタは文字列を保存するのではなく、文字列の先頭を保存します。文字配列。要素のアドレス。したがって、間接演算子 * を使用して、この文字配列の最初の要素であるこのアドレスの値を読み取ることができます。
ここでの p の型はポインタであるため、文字列 xxx はそれが指すメモリ アドレスに格納されます。p を直接使用すると、出力は p が指すメモリ アドレスになります。このポインタが指す内容を出力するには、その前に * を付けます。
p
まず、p はポインタ型で、アドレスを格納します。このアドレスは index で、文字列全体 (実際には文字列ではありません) の最初の文字のアドレスとして理解できます。配列の最初の要素に似ています。 *このシンボルは、ポインタ変数を定義するときにその変数を定義することを示し、呼び出されるときにアドレスの値を取得します。 printf("%c",*p);、ステートメントに * を追加しない場合、出力するのは p の値ですが、p の値はアドレスであるため、当然のことながら、実際に存在する p アドレスを取得します。 *を追加すると、このアドレスに格納されている値を取得できます。
index
*
printf("%c",*p);
「*」を追加せずに、配列の添字を使用して最初の文字を出力することもできます。
p は、要素を指すアドレスを格納します。 を追加しない場合は、 を指す要素になります。
まず、エディタを使用してデバッグし、printf 行にブレークポイントを設定してから、モニターを見て p と *p がそれぞれ何を指しているのかを確認することをお勧めします。
p は文字ポインタ型で、文字配列の最初の要素のアドレスを指します。*p は最初の要素である p が指す値を受け取ります。
理解できれば、p++,*p++ の結果と、演算後の p の値が何になるかを考えることができます
まず第一に、C にはそのようなタイプの文字列はありません。C の文字列は null 文字で終わる文字配列です。
その場合、p ポインタは文字列を保存するのではなく、文字列の先頭を保存します。文字配列。要素のアドレス。
したがって、間接演算子 * を使用して、この文字配列の最初の要素であるこのアドレスの値を読み取ることができます。
ここでの
p
の型はポインタであるため、文字列 xxx はそれが指すメモリ アドレスに格納されます。p
を直接使用すると、出力はp
が指すメモリ アドレスになります。このポインタが指す内容を出力するには、その前に * を付けます。まず、
p
はポインタ型で、アドレスを格納します。このアドレスはindex
で、文字列全体 (実際には文字列ではありません) の最初の文字のアドレスとして理解できます。配列の最初の要素に似ています。*
このシンボルは、ポインタ変数を定義するときにその変数を定義することを示し、呼び出されるときにアドレスの値を取得します。printf("%c",*p);
、ステートメントに*
を追加しない場合、出力するのはp
の値ですが、p
の値はアドレスであるため、当然のことながら、実際に存在するp
アドレスを取得します。*
を追加すると、このアドレスに格納されている値を取得できます。「*」を追加せずに、配列の添字を使用して最初の文字を出力することもできます。
リーリーp は、要素を指すアドレスを格納します。 を追加しない場合は、 を指す要素になります。