在文《csdn一道C语言题的学习》中,有关于对数组地址的操作。对于一个数组struct A,A就是指向数组的首地址,这个是在编译时确定的,对于取址操作符&,在运行时确定,&A的值也是数组的首地址。即A与&A的值是相同的,不过两者的含义有所不同。区别如下:
1)地址含义的不同,A又可以理解为&A[0],A+1,即表示&A[1];但是,对于&A+1,则表示是下个数组的首地址, 即A+sizeof(A)。
2)取值方法的不同,显然*A即为A[0],*(A+1)即为A[1],这是常用的方式。*(&A)在运行时*和&相互抵消,值仍然是指向数组A的首地址。要取A[0]的值,应该用**(&A)才可。相似的,取A[1]的值,应该是*(*(&A)+1)。注意跟**(&A+1)的区别,后者是取下个数组首个元素的值。这种方式一般不会采用,不过,可以学习下,以当消遣之用。
1)地址含义的不同,A又可以理解为&A[0],A+1,即表示&A[1];但是,对于&A+1,则表示是下个数组的首地址, 即A+sizeof(A)。
2)取值方法的不同,显然*A即为A[0],*(A+1)即为A[1],这是常用的方式。*(&A)在运行时*和&相互抵消,值仍然是指向数组A的首地址。要取A[0]的值,应该用**(&A)才可。相似的,取A[1]的值,应该是*(*(&A)+1)。注意跟**(&A+1)的区别,后者是取下个数组首个元素的值。这种方式一般不会采用,不过,可以学习下,以当消遣之用。