求大神::C语言的 &数组名 和 数组名的区别

Python015

求大神::C语言的 &数组名 和 数组名的区别,第1张

1.&数组名作参数传递肯定是不对的,你看一下C语言书中关于数组作参数就知道了(里面例子也能反应)

2.&数组名相当于指针的指针,指向数组名,而数组名又是一个数组的首地址,求sizeof结果是一下的,返回的都是数组的大小

3.&符号有去地址的作用,而数组名本身也是一个地址,它指向的数组的第一行。&数组指向的数组名,是指针的指针。所以才会有:&数组名类型是 int (*)[],而数组类型是int []

也在持续的学习volatile并完善中…这里说说我的理解(参考《C语言深度解剖》):

首先看看这个例子:

int i = 10

int j = i ①

int k = i ②

由于编译器对代码进行优化(听说优化功能是可以关掉的),由于①②两条语句间i没有被用作左值另行赋值,编译器认为i的值没有改变;在执行①语句的时候,从内存中取出i赋给j,而在继续执行②语句的时候,继续用这个取出的值赋给k——而问题出在这里,如果在执行①之后,中断来了,改变了i的值,这时候跳出中断继续执行②的话,赋给k的还是之前取出的那个值,并不是被中断改变的那个新的值;而如果i声明了volatile类型的话,编译器不会对它进行优化,这样每次用i来给其他变量j、k赋值的时候,都是“不厌其烦”地冲内存中取一遍i的值,这样,即使中断或者其他共享进程改变了这个volatile类型的i值,每次用它的时候都能确保用到它的最新的值。

加油!