求大神::C语言的 &数组名 和 数组名的区别
1.如果相同,那么将&数组名赋值或者传递给数组参数的时候,会提示:&数组名类型是int(*)[],而数组类型是int[],他们不能赋值。2.如果不同,那么为什么,size...
1.如果相同,那么将&数组名赋值或者传递给数组参数的时候,会提示:&数组名类型是 int (*)[],而数组类型是int [],他们不能赋值。
2.如果不同,那么为什么,sizeof(&数组名)==sizeof(数组名)??
3.同样,&函数名和函数名的区别
请尽量详尽地回答,最好提供相关资料的连接
谢谢
原来是这样的,&数组名和数组名是不同的,根据其数据类型就知道了。问题的关键在于为什么sizeof(数组名)==sizeof(&数组名)呢,原因如下:
1,数组名本质上是个地址,但不能说是指针,它能给指针赋值,是因为,指针本身的数据结构和数组名(地址)是一样的 都是32位的int,所以这里能通过指针来对数组进行操作
2,sizeof(数组名)为什么等于sizeof(元素类型)*元素个数呢?这个问题就好比 int i;然后sizeof(i)是一样的道理,因为i实际上代表了一块内存为4byte的大小,同理,a这个数组的“名字”也代表了一块数组整体大小的内存块,所以 sizeof(数组名)==sizeof(元素类型)*元素个数
3,&数组名 只是个指向数组名的指针,大小为4byte(32位),所以,它和数组名不能等同
4,vc6下sizeof(&数组名)==sizeof(数组名),我认为是错的,因为我在linux 下用gcc测试int a[10]的结果是:sizeof(a)==40,sizeof(&a)==4,这也论证了第3点是正确的
5,因为个人觉得gcc对ansi c支持得比较好,所以我认为vc6的编译器在此处的处理是错误的
6,以上观点在陈正冲写的《c语言深度解剖》等到了论证,详见此书的第四章 指针和数组
各位的回答都很好,谢谢各位了 展开
2.如果不同,那么为什么,sizeof(&数组名)==sizeof(数组名)??
3.同样,&函数名和函数名的区别
请尽量详尽地回答,最好提供相关资料的连接
谢谢
原来是这样的,&数组名和数组名是不同的,根据其数据类型就知道了。问题的关键在于为什么sizeof(数组名)==sizeof(&数组名)呢,原因如下:
1,数组名本质上是个地址,但不能说是指针,它能给指针赋值,是因为,指针本身的数据结构和数组名(地址)是一样的 都是32位的int,所以这里能通过指针来对数组进行操作
2,sizeof(数组名)为什么等于sizeof(元素类型)*元素个数呢?这个问题就好比 int i;然后sizeof(i)是一样的道理,因为i实际上代表了一块内存为4byte的大小,同理,a这个数组的“名字”也代表了一块数组整体大小的内存块,所以 sizeof(数组名)==sizeof(元素类型)*元素个数
3,&数组名 只是个指向数组名的指针,大小为4byte(32位),所以,它和数组名不能等同
4,vc6下sizeof(&数组名)==sizeof(数组名),我认为是错的,因为我在linux 下用gcc测试int a[10]的结果是:sizeof(a)==40,sizeof(&a)==4,这也论证了第3点是正确的
5,因为个人觉得gcc对ansi c支持得比较好,所以我认为vc6的编译器在此处的处理是错误的
6,以上观点在陈正冲写的《c语言深度解剖》等到了论证,详见此书的第四章 指针和数组
各位的回答都很好,谢谢各位了 展开
展开全部
是不同的,原因你已经在1里的提示说了,sizeof(指针)的时候,会把指针指向的内容的大小作为返回值,&数组名是一个指向数组的指针,返回的就是其指向的数组的大小,所以是相等的。你可以把数组名和函数名当成一种const类型的指针来理解。
追问
sizeof(pointer)的时候,返回的是指针类型的内存大小,如,32位系统指针是4个字节,char c;
sizeof(c)==1; sizeof(&c)==4
所以,我觉得你所说的“sizeof(指针)的时候,会把指针指向的内容的大小作为返回值”有问题
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.&数组名=数组名(值相等,但是类型不一样)
2.都是指针
3.同1,2
http://blog.csdn.net/maybelle0049/archive/2010/06/22/5687845.aspx
2.都是指针
3.同1,2
http://blog.csdn.net/maybelle0049/archive/2010/06/22/5687845.aspx
参考资料: http://blog.csdn.net/maybelle0049/archive/2010/06/22/5687845.aspx
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把int[] 看作 int*
1. &array: int**
array: int*
2. 都是指针
3. 未见过&fun的用法
1. &array: int**
array: int*
2. 都是指针
3. 未见过&fun的用法
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2017-04-22
展开全部
谢谢楼主,我也被这个问题迷惑,原来是这样啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询