&a [ 0 ] [ 0 ] 和a [ 0 ] [ 0 ] 有什么不同??c语言不同的基类型

转子:http://blog.csdn.net/eastmoon502136/article/details/8630790首先a是一个数组名,当看到这个a与&a时,一般我们的理解都是这个数组的首地址。没错,如果加上打印的话,确实两个值是一样的。不过&a是整个数组的首地址,a则是数组首元素的地址,虽然值一样,但是意义却不相同。在此之前有必要先看下c程序在内存中的分布图。下面来看一个例子吧还是。示例代码:[html]&view plaincopy#include&&stdio.h&&&int&main(int&argc,&char&*argv[])&&{&&&&&&int&i;&&&&&&int&a[]={1,&2,&3,&4,&5};&&&&&&int&s;&&&&&&int&*p&=&(int&*)(&a+1);&&&&&&printf(&&a&=&%p/n&a&=&%p/n&,&a,&&a);&&&&&&for(i&=&0;&i&&&5;&i++)&&&&&&&&&&printf(&a[%d]&=&%p/n&,&i,&&a[i]);&&&&&&printf(&&p&=&%p/n&p&=&%p/n&s&=&%p/n&,&p,&&p,&&s);&&&&&&return&0;&&}&&运行结果:&[html]&view plaincopya&=&0022FF40&&&a&=&0022FF40&&a[0]&=&0022FF40&&a[1]&=&0022FF44&&a[2]&=&0022FF48&&a[3]&=&0022FF4C&&a[4]&=&0022FF50&&&p&=&0022FF54&&&p&=&0022FF38&&&s&=&0022FF3C&&由上面的运行结果,我们可以知道a和&a的区别了。可得下图:因为是运行在main函数体内的变量,所以这些都是在栈中运行的,所以p指针是指向了a[4]后的那个地址,而p本身的地址是在栈中分配的。综上可知:[html]&view plaincopy&a+i&=&a&+&i*sizeof(a);&&a+i&=&a&+i*sizeof(a[0]); &&总结:.cn/s/blog_75b0e2ad01014ig3.html&a+1不是首地址+1,系统会认为加了一个整个a数组,偏移了整个数组a的大小(也就是5个int的大小)。所以int *ptr=(int *)(&a+1);其实ptr实际是&(a[5]),也就是a+5.原因为何呢?&a是数组指针,其类型为int(*)[5];而指针加1要根据指针类型加上一定的值,不同类型的指针+1之后增加的大小不同,a是长度为5的int数组指针,所以要加5*sizeof(int),所以ptr实际是a[5],但是ptr与(&a+1)类型是不一样的,这点非常重要,所以ptr-1只会减去sizeof(int*),a,&a的地址是一样的,但意思就不一样了,a是数组首地址,也就是a[0]的地址,&a是对象(数组)首地址,a+1是数组下一元素的地址,即a[1],&a+1是下一个对象的地址,即a[5]。提问回答都赚钱
> 问题详情
在C语言中,若有定义“int a[10];”,则______不能表示a[1]的地址。A.alB.&a[0]=1C.aD.&a[
悬赏:0&&答案豆&&&&提问人:匿名网友&&&&提问收益:0.00答案豆&&&&&&
在C语言中,若有定义“int a[10];”,则______不能表示a[1]的地址。A.a+lB.&a[0]=1C.a++D.&a[1]请帮忙给出正确答案和分析,谢谢!
权威推荐: & &
发布时间:&&截止时间:
网友回答&(共0条)
回答悬赏问题预计能赚取&4.00元收益
回答悬赏问题预计能赚取&91.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&2.00元收益
回答悬赏问题预计能赚取&91.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&4.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&91.00元收益
回答悬赏问题预计能赚取&4.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&2.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&2.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&91.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&91.00元收益
回答悬赏问题预计能赚取&4.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&4.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&91.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&51.00元收益
回答悬赏问题预计能赚取&51.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&3.00元收益
你可能喜欢的
[] [] [] [] [] C语言学习中的四大难点_.net[] [] [] [] [] [] []
请先输入下方的验证码查看最佳答案
图形验证:c语言数组中的a[0]=a[5]+a[7]-a[2*3]是什么意思?_百度知道
c语言数组中的a[0]=a[5]+a[7]-a[2*3]是什么意思?
a是数组名,a[0]为第一个数,依次类推,[]里有运算就先算里面的
其他类似问题
为您推荐:
其他4条回答
即a[10]中[]内必须为一个常量。至于元素,里面的数字常量为 数组的第几号成员元素,数组元素下标值是从0开始的!但是定义数组的时候一定要定义他的下标值! 这个时候你就可以用数组了来表示哪些个变量了。 例如
a[0]为 数组a[10]的第一号成员元素,即整型(还有字符型 char 和float 实型等)a
为数组名 [] 为下标符号,总不能定义N个变量吧,数组的定义为 。如果你要用到很多变量的话,则他的成员数为a[0]到a[9];那么 你可以让 a 成为数组 a[10]的一个元素.千万不要把a[10]也当成了他的成员了,例如你定义一个变量 int a,即你定义a[10]。这里有点要注意的是;其中 int 为类型,int a[10]元素组成了数组
其实这个没有别的意思,就是用数组的其他元素来对a[0]进行赋值。
这就是a[0]+a[7]-a[6]的意思,按从左向右的方向运算。
相当于a[0]=a[5]+a[7]-a[6]计算a[5]+a[7]-a[6],对a[0]赋值。
c语言数组的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁c语言数组,为什么a和&a[0]取值相同?而不是和a[0]取值相同?_百度知道
c语言数组,为什么a和&a[0]取值相同?而不是和a[0]取值相同?
提问者采纳
&a[0]代表的不是一个值a就是一个指针,然后指向a[0],而是一个物理地址
那么p=a;和p=&a[0];不一样吗?
p是什么类型的?如果是指针,那就是一样的,如果不是,不一样。
其他类似问题
为您推荐:
其他2条回答
&a[0]表示第一个元数的地址比如:a[5]这个数组a就表示数组的首地址,a[0]表示第一个元数,其实就是首地址
&a[0] &是地址符,a[0]表示数组的第一个数
a是数组名,使用数组名系统默认的就是指第一个数。。。
那你的意思就是a和a[0]是一样的喽?
c语言数组的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 c语言产生不同随机数 的文章

 

随机推荐