C语言地址表达式
发布网友
发布时间:2022-06-02 05:07
我来回答
共5个回答
热心网友
时间:2023-10-30 08:21
C不是地址表达式
A.&a[1][2] //第2行第3列的元素地址
B.a[3] //第4行1列的元素地址
C.*(p+1*10+2) //第2行第3列的元素
D.p+1*10+2 //第2行第3列的元素地址,也就是说A和B的指的是同一元素的地址,也就是C元素的地址
这个例子可以看的非常明白
#include<stdio.h>
int main()
{
int a[4][10]={{0,1,2,3,5,6,7,8,9},
{10,11,12,13,14,15,16,17,18,19},
{20,21,22,23,24,25,26,27,28,29},
{30,31,32,33,34,35,36,37,38,39}};
int *p=*a;
printf("%d\n",&a[1][2]);
printf("%d\n",a[3]);
printf("%d\n",&a[3][0]);
printf("%d\n",*(p+1*10+2) );
printf("%d\n",a[1][2]);
printf("%d\n",p+1*10+2);
}
输出结果:
1244916
1244988
1244988
12
12
1244916
热心网友
时间:2023-10-30 08:21
C
P指向数组的列,是一个列指针,p+1*10+2指向第0行的第12列,因为数组是按行储存的,所以也就是第1行的第2列,这是一个地址,但C对他进行了*操作,也就是取他的值,就成了一个数了
A是一个地址很显然,而B他也是一个地址,代表第3行
的首地址,相当于是一个一维数组名
热心网友
时间:2023-10-30 08:21
C,p本来是地址,然后被括号起来取其内容,就不是地址了
热心网友
时间:2023-10-30 08:22
p和a是等价的,只要用a能表示用p就能表示
热心网友
时间:2023-10-30 08:23
a[1]
(p+1),a[2]
(p+2)
以此类推