我的理解是:int *p=&x, 这里定义的是pointer p的值是x的地址&x,之后p就是一个指向x的pointer,*p就是x的值。之后我们想改x的值为y,就写*p=y。
那么在string里,char *p="kate",想把这个词换成cat,为什么是p="cat"而不是*p="cat"?
然后char p[ ]也是一个pointer吗?
char *p[ ]和char p[ ]又有什么区别呢?
pointer好难啊TT_TT
c语言 pointer 完全一团浆糊…
答案:2 悬赏:0 手机版
解决时间 2021-01-24 14:47
- 提问者网友:杀生予夺
- 2021-01-23 23:55
最佳答案
- 五星知识达人网友:春色三分
- 2021-01-24 01:33
1、你对于 int *的理解是对的。其实,char *、float *、double *也是一样的。
2、对于char *pstr = "kate"的理解需要分清,"kate"是多个字符。
char c = 'A';
char *pc;
char *pstr = "kate";
将pc执行(1)中的操作,都会得到你要的结果,但对pstr执行的操作只会修改'k',而不会涉及余下的三个字符"ate"。对于多个字符,编译程序会在存放这些字符的尾部添加一个字符'\0',其ASCII值是0,这是为了方便string函数处理字符串而特意添加的,而对于int等基础类型的多个变量的存储中则没有与这个类似尾部添加符。
对于多个字符的处理与字符数组有很多相同之处,也有不同之处,说起来很啰嗦。比如,数组不能以数组名直接赋值,对于字符串指针也有同样的限制,数组名不能被当作左值(不能出现在=的左边),但指针可以,当指针是左值时,只是将指针的指向改变为新值,而并不是改变了指针指向的内容(昏了没?),......,二者间区别还有,这里不说了,在以后的学习当中慢慢体会吧。
2、对于char *pstr = "kate"的理解需要分清,"kate"是多个字符。
char c = 'A';
char *pc;
char *pstr = "kate";
将pc执行(1)中的操作,都会得到你要的结果,但对pstr执行的操作只会修改'k',而不会涉及余下的三个字符"ate"。对于多个字符,编译程序会在存放这些字符的尾部添加一个字符'\0',其ASCII值是0,这是为了方便string函数处理字符串而特意添加的,而对于int等基础类型的多个变量的存储中则没有与这个类似尾部添加符。
对于多个字符的处理与字符数组有很多相同之处,也有不同之处,说起来很啰嗦。比如,数组不能以数组名直接赋值,对于字符串指针也有同样的限制,数组名不能被当作左值(不能出现在=的左边),但指针可以,当指针是左值时,只是将指针的指向改变为新值,而并不是改变了指针指向的内容(昏了没?),......,二者间区别还有,这里不说了,在以后的学习当中慢慢体会吧。
全部回答
- 1楼网友:何以畏孤独
- 2021-01-24 01:43
指针变量存的是地址; pointer_1=&aint* pointer_1 =&a等价于int *pointer_1,前面加*等于指向pointer_1所存地址的值
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯