请问大家个问题: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是对的,所以这个不用提了),求详细解释,谢谢! 展开
p="abcd";
那么整型数据怎么不可以呢,如我这样定义就不行,为什么?
int *p;
p=10;
又或者int a=10,*p;
p=a;
为什么这样不行呢,(我知道p=&a是对的,所以这个不用提了),求详细解释,谢谢! 展开
3个回答
展开全部
1. 首先这并不是用指针定义字符串,只不过是把指针p指向字符串"abcd"的首地址,这个字符串具有一个常量地址,可以读,但是不可写,例如你想进行p[0] = 'e';的操作是不行的。
2. 整型数据的问题。其实也不是不可以,你的p是int *类型,而你的10默认是int类型,赋值运算符=要求两边类型一致,所以,你可以这样写,p = (int *)10; 这样就是把整数10作为一个地址赋值给p。
3. p = a的问题就更直接了,左边是int *,右边是int,而&a可以得到int *类型,所以你的问题应该是对于指针的理解还不到位,可以把教材中的这部分内容再多推敲一下,指针是C语言的精华所在,应用无穷
2. 整型数据的问题。其实也不是不可以,你的p是int *类型,而你的10默认是int类型,赋值运算符=要求两边类型一致,所以,你可以这样写,p = (int *)10; 这样就是把整数10作为一个地址赋值给p。
3. p = a的问题就更直接了,左边是int *,右边是int,而&a可以得到int *类型,所以你的问题应该是对于指针的理解还不到位,可以把教材中的这部分内容再多推敲一下,指针是C语言的精华所在,应用无穷
展开全部
我的理解是这样的:
作为一个基本类型(int,char等)它们在内存中的大小是固定的,而且这快内存可以单独作为一个值被使用。所以是完全的值对象。
而字符串这种东西是完全不可预估长度的,所以你只能通过它的首地址,去查找结束符,然后把整块不固定的内存整体看做一个值。所以你无法把字符串当作值对象,只能利用首地址去动态抽取值是什么。
作为一个基本类型(int,char等)它们在内存中的大小是固定的,而且这快内存可以单独作为一个值被使用。所以是完全的值对象。
而字符串这种东西是完全不可预估长度的,所以你只能通过它的首地址,去查找结束符,然后把整块不固定的内存整体看做一个值。所以你无法把字符串当作值对象,只能利用首地址去动态抽取值是什么。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这就是地址与该地址里面的值的区别了
用数组比较吧
数组a[10],如果p=a这是可以的,因为a是数组的首地址,而p=a[0]就不行了,这是数组首元素的值
p="abcd",其实是将其首地址给赋给它了。个人理解是这样的
用数组比较吧
数组a[10],如果p=a这是可以的,因为a是数组的首地址,而p=a[0]就不行了,这是数组首元素的值
p="abcd",其实是将其首地址给赋给它了。个人理解是这样的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询