84669 personnes étudient
152542 personnes étudient
20005 personnes étudient
5487 personnes étudient
7821 personnes étudient
359900 personnes étudient
3350 personnes étudient
180660 personnes étudient
48569 personnes étudient
18603 personnes étudient
40936 personnes étudient
1549 personnes étudient
1183 personnes étudient
32909 personnes étudient
代码如下:
#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 是一个指针类型,他存储的是指向元素的地址,如果不加 ,则打印的为具体的地址量,加号后是指向的元素