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

char *p;
p="abcd";
那么整型数据怎么不可以呢,如我这样定义就不行,为什么?
int *p;
p=10;
又或者int a=10,*p;
p=a;
为什么这样不行呢,(我知道p=&a是对的,所以这个不用提了),求详细解释,谢谢!

1. 首先这并不是用指针定义字符串,只不过是把指针p指向字符串"abcd"的首地址,这个字符串具有一个常量地址,可以读,但是不可写,例如你想进行p[0] = 'e';的操作是不行的。

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

3. p = a的问题就更直接了,左边是int *,右边是int,而&a可以得到int *类型,所以你的问题应该是对于指针的理解还不到位,可以把教材中的这部分内容再多推敲一下,指针是C语言的精华所在,应用无穷
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-21
我的理解是这样的:
作为一个基本类型(int,char等)它们在内存中的大小是固定的,而且这快内存可以单独作为一个值被使用。所以是完全的值对象。
而字符串这种东西是完全不可预估长度的,所以你只能通过它的首地址,去查找结束符,然后把整块不固定的内存整体看做一个值。所以你无法把字符串当作值对象,只能利用首地址去动态抽取值是什么。
第2个回答  2013-05-21
这就是地址与该地址里面的值的区别了
用数组比较吧
数组a[10],如果p=a这是可以的,因为a是数组的首地址,而p=a[0]就不行了,这是数组首元素的值
p="abcd",其实是将其首地址给赋给它了。个人理解是这样的

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网