您的位置:首页 > 编程语言 > C语言/C++

【C语言】数组名&地址&地址中的值的访问

2013-05-04 10:49 288 查看
数组名&地址&地址中的值的访问
1 一维数组
一维数组名输出的是地址,相应的“*数组名”,输出的是这个地址指向的数字。
比如:int matrix[5];
数组名matrix表示的是这个数组的首地址,而*matrix表示的是这个首地址指向的值。
2二维数组
二维数组数组名表示的是第一行的地址,相应的“*数组名”表示的是第一列的地址,而**数组名表示的是第一行第一列指向的值。
二维数组 有2级指针,第一级就是数组名,表示行,移动的大小以行为单位;第二级就是*数组名表示列地址,移动的大小以列中的基本数据类型为单位

int main()
{
int matrix[3][5] = {{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}};
printf("%p",matrix);
printf("%p",*matrix);
printf("%d",**matrix);
return 0;
}
二维数组名 matrix和 *matrix的输出结果是相同的,而**matrix指向的是matrix地址处存放的值 1.
所以 matrix+ 2表示的是指向第一行的指针指向了下2行;
而 (*matrix + 2)表示的是*matrix处的列指针向右移动了2位
所以,如上 *(*matrix + 2)输出的值应该是 3,第一行的列指针向右移动了3位。

以此类推,三维数组:

int matrix[3][5][6] = {0};
printf("%p\n",matrix);
printf("%p\n",*matrix);
printf("%p\n",**matrix);
数组名表示的是第一维层地址,*数组名表示的是第二维行地址,**数组名表示的是第三维列地址。

公式 简化指针运算

*(*(a+1) + 2) == *(a+1)[2] == a[1][2];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: