请问大家个问题:C语言中,字符串可以用指针直接定义,如

char*p;p="abcd";那么整型数据怎么不可以呢,如我这样定义就不行,为什么?int*p;p=10;又或者inta=10,*p;p=a;为什么这样不行呢,(我知道... char *p;
p="abcd";
那么整型数据怎么不可以呢,如我这样定义就不行,为什么?
int *p;
p=10;
又或者int a=10,*p;
p=a;
为什么这样不行呢,(我知道p=&a是对的,所以这个不用提了),求详细解释,谢谢!
展开
 我来答
dufenglei908
推荐于2016-01-07 · TA获得超过6372个赞
知道大有可为答主
回答量:1449
采纳率:60%
帮助的人:751万
展开全部
1. 首先这并不是用指针定义字符串,只不过是把指针p指向字符串"abcd"的首地址,这个字符串具有一个常量地址,可以读,但是不可写,例如你想进行p[0] = 'e';的操作是不行的。

2. 整型数据的问题。其实也不是不可以,你的p是int *类型,而你的10默认是int类型,赋值运算符=要求两边类型一致,所以,你可以这样写,p = (int *)10; 这样就是把整数10作为一个地址赋值给p。

3. p = a的问题就更直接了,左边是int *,右边是int,而&a可以得到int *类型,所以你的问题应该是对于指针的理解还不到位,可以把教材中的这部分内容再多推敲一下,指针是C语言的精华所在,应用无穷
mayunjiang8103
2013-05-21 · 超过48用户采纳过TA的回答
知道小有建树答主
回答量:246
采纳率:100%
帮助的人:139万
展开全部
我的理解是这样的:
作为一个基本类型(int,char等)它们在内存中的大小是固定的,而且这快内存可以单独作为一个值被使用。所以是完全的值对象。
而字符串这种东西是完全不可预估长度的,所以你只能通过它的首地址,去查找结束符,然后把整块不固定的内存整体看做一个值。所以你无法把字符串当作值对象,只能利用首地址去动态抽取值是什么。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
还说你不知道
2013-05-21
知道答主
回答量:60
采纳率:0%
帮助的人:16万
展开全部
这就是地址与该地址里面的值的区别了
用数组比较吧
数组a[10],如果p=a这是可以的,因为a是数组的首地址,而p=a[0]就不行了,这是数组首元素的值
p="abcd",其实是将其首地址给赋给它了。个人理解是这样的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式