84669인 학습
152542인 학습
20005인 학습
5487인 학습
7821인 학습
359900인 학습
3350인 학습
180660인 학습
48569인 학습
18603인 학습
40936인 학습
1549인 학습
1183인 학습
32909인 학습
代码如下:
#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 中的字符串是以空字符结尾的字符数组.然后, 这个 p 指针保存的不是这个字符串, 而是这个字符数组的首元素的地址.所以就可以用间接运算符 * 读出这个地址里面的值, 也就是这个字符数组的第一个元素.
因为这里的p的类型是一个指针,字符串xxx存储在它指向的内存地址中,直接使用p的话输出的是p指向的内存地址,前面加一个*就是输出这个指针指向的内容。
p
首先呢,p是一个指针类型,它存的是一个地址,并且这个地址是index,可以理解成是整个字符串(其实并不是字符串)的第一个字符的地址,类似于数组中的第一个元素。*这个符号呢,在定义的时候是指定义一个指针变量,而在调用的时候,是取地址中寸的值。printf("%c",*p);,你的这个语句,如果不加*,代表你输出的是p的值,可是p的值是一个地址,所以你自然得不到p地址真正存着的值。加上了*,你就可以取得这个地址所存的值了。
index
*
printf("%c",*p);
也可以不加"*"的哦,用数组下标的方式也可以输出第一个字符
printf("%c",p[0]);
p 是一个指针类型,他存储的是指向元素的地址,如果不加 ,则打印的为具体的地址量,加号后是指向的元素
首先呢,建议你用编辑器调试,在printf这一行打个断点,然后再监视器里看p和*p分别指向什么。
然后,p是字符指针类型,指向的是一个字符数组首元素的地址,*p取p指向的值,也就是第一个元素。
如果明白了,你可以思考下 p++,*p++的结果是什么,运算之后p的值是多少
首先, C 里没有字符串这种类型, C 中的字符串是以空字符结尾的字符数组.
然后, 这个 p 指针保存的不是这个字符串, 而是这个字符数组的首元素的地址.
所以就可以用间接运算符 * 读出这个地址里面的值, 也就是这个字符数组的第一个元素.
因为这里的
p
的类型是一个指针,字符串xxx存储在它指向的内存地址中,直接使用p
的话输出的是p
指向的内存地址,前面加一个*就是输出这个指针指向的内容。首先呢,
p
是一个指针类型,它存的是一个地址,并且这个地址是index
,可以理解成是整个字符串(其实并不是字符串)的第一个字符的地址,类似于数组中的第一个元素。*
这个符号呢,在定义的时候是指定义一个指针变量,而在调用的时候,是取地址中寸的值。printf("%c",*p);
,你的这个语句,如果不加*
,代表你输出的是p
的值,可是p
的值是一个地址,所以你自然得不到p
地址真正存着的值。加上了*
,你就可以取得这个地址所存的值了。也可以不加"*"的哦,用数组下标的方式也可以输出第一个字符
p 是一个指针类型,他存储的是指向元素的地址,如果不加 ,则打印的为具体的地址量,加号后是指向的元素