数组a的地址是多少?

如题所述

*(*(a+i)+j) 。

a是二维数组名,也是二维数组0行的首地址。a[0]是第一个一维数组的数组名和首地址*(a+0)或*a是与a[0]等效的,它表示一维数组a[0]0号元素的首地址。&a[0][0]是二维数组a的0行0列元素首地址。

同理,a+1是二维数组1行的首地址,由此可得出:a+i,a[i],*(a+i),&a[i][0]是等同的。此外,&a[i]和a[i]也是等同的。

另外,a[0]也可以看成是a[0]+0是一维数组a[0]的0号元素的首地址,而a[0]+1则是a[0]的1号元素首地址,由此可得出a[i]+j则是一维数组a[i]的j号元素首地址,它等于&a[i][j]。

由a[i]=*(a+i)得a[i]+j=*(a+i)+j,由于*(a+i)+j是二维数组a的i行j列元素的首地址。因此,该元素的值等于*(*(a+i)+j)。

扩展资料:

两个地方要注意: 

1、在程序声明变量的时候的*,只是表明“它是一个无符号整数,这个整数指向某个内存地址,一次访问sizeof(type)长度”。这点不要和(*)操作符混淆;

在C++程序声明变量的时候的&,只是表明“它是一个引用,这个引用声明时不开辟新空间,它在内存分配表加入新的一行,该行内存地址等于和调用时传入的对应参数内存地址”。

这点不要和(*)声明符,(&)操作符混淆。

参考资料:

百度百科-数组指针

百度百科-指针

温馨提示:答案为网友推荐,仅供参考
第1个回答  2023-12-30
在编程中,数组 `a` 的地址并不能直接给出,因为它取决于数组在程序运行时所在的内存位置,这个位置由操作系统的内存管理系统在程序执行时动态分配。每次程序运行时,数组 `a` 的地址都可能不同。
如果你是在具体的编程环境中,例如C语言,你可以使用取地址运算符 `&` 来获取数组的首元素地址,或者直接使用数组名,因为数组名本身通常代表了数组首元素的地址。例如:
```c
#include <stdio.h>
int main() {
int a[10];
printf("The address of array a is %p\n", (void*)a);
return 0;
}
```
在上面的代码中,`a` 将会被转换为指向其首元素的指针,而 `%p` 格式化符号用于在 `printf` 函数中输出指针类型的数据。这段代码将会输出数组 `a` 的首元素地址,这个地址也可以被视为整个数组的起始地址。
请注意,这个地址在每次程序运行时都可能不同,因为操作系统为了安全和优化的原因,通常会进行地址空间布局随机化(Address Space Layout Randomization, ASLR)。
相似回答