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

9、C语言中二维数组及数组名及指向二维数组的指针变量

2013-06-06 22:33 246 查看
#include <stdio.h>
#include <stdlib.h>
//与二维数组相关的指针变量([] 比 *优先级高)
//在一般指针变量指向二维数组,或者n维数组,要直接操作a[i][j],对指针的操作必须有两个符号(其中不出现&,如果有&则相应的加上* 的个数):
//1、两个*
//2、两个[]
//3、一个* 一个[]
//4、有一个*或[ ]代表数组中某个元素的首地址
//同理n维,或者就是数组中某些地址而不是数组中元素的值
int main()
{
int arr[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};//3行4列,也可以理解成3个长度为4的一维数组组成
int *p1=arr;//arr代表指向首行的首地址.
int *p2=*arr;//元素arr[0][0]的首地址. p2=arr[0];p2=*(arr+0); 相当于 &arr[0][0]
printf("数组所占字节数:sizeof(arr)=%d\n",sizeof(arr));//数组所占字节数
int i=0,j=0;
printf("&arr=%d,arr=%d\n",arr,&arr);//内存地址代表一样。
printf("================\n");
printf("直接利用数组名来操作:\n");
for(i=0;i<3;i++)
{
//记住:[]的优先级大于*
//所有出现*(arr+i)<<==>>arr[i]<<==>>*(arr+i)+0
//所有出现*(arr+i)+j<<==>>arr[i][j]<<==>>
printf("第%d行的首地址(相当于&arr[%d]):arr+%d=%d\n",i,i,i,arr+i);//相当于 &arr[i] //第i行了首地址
printf("元素arr[%d][0]的首地址(相当于&arr[%d][0]):*(arr+%d)=%d\n",i,i,i,*(arr+i));//相当于 &arr[i][0] 元素arr[i][0]的首地址
for(j=0;j<4;j++)
{
printf("元素arr[%d][%d]的首地址(相当于&arr[%d][%d]):*(arr+%d)+%d=%d\n",i,j,i,j,i,j,*(arr+i)+j);
printf("元素arr[%d][%d]的值:arr[%d][%d]=%d\n",i,j,i,j,*(*(arr+i)+j));
}
printf("================\n");
}
//指针p1完全可以和上面一样的完全操作,但p2有自己的方式,可以自增,减
//记住:[]的优先级大于*
//所有出现*(p+i)<<==>>p[i]<<==>>*(p+i)+0
//所有出现*(p+i)+j<<==>>p[i][j]<<==>>
printf("直接利用指针变量名来操作():\n");
for(i=0,j=1,p2=arr[0];p2<arr[0]+sizeof(arr)/sizeof(int);p2++)
{
printf("元素arr[%d][%d]的首地址:&arr[%d][%d]=%d\n",i,j-1,i,j-1,p2);
printf("元素arr[%d][%d]的值:arr[%d][%d]=%d\n",i,j-1,i,j-1,*p2);
if(j%4==0)
{
i++;
j=1;
printf("================\n");
}
else
{
j++;
}
}
return 0;
}


程序输出结果:

数组所占字节数:sizeof(arr)=48

&arr=2686668,arr=2686668

================

直接利用数组名来操作:

第0行的首地址(相当于&arr[0]):arr+0=2686668

元素arr[0][0]的首地址(相当于&arr[0][0]):*(arr+0)=2686668

元素arr[0][0]的首地址(相当于&arr[0][0]):*(arr+0)+0=2686668

元素arr[0][0]的值:arr[0][0]=1

元素arr[0][1]的首地址(相当于&arr[0][1]):*(arr+0)+1=2686672

元素arr[0][1]的值:arr[0][1]=2

元素arr[0][2]的首地址(相当于&arr[0][2]):*(arr+0)+2=2686676

元素arr[0][2]的值:arr[0][2]=3

元素arr[0][3]的首地址(相当于&arr[0][3]):*(arr+0)+3=2686680

元素arr[0][3]的值:arr[0][3]=4

================

第1行的首地址(相当于&arr[1]):arr+1=2686684

元素arr[1][0]的首地址(相当于&arr[1][0]):*(arr+1)=2686684

元素arr[1][0]的首地址(相当于&arr[1][0]):*(arr+1)+0=2686684

元素arr[1][0]的值:arr[1][0]=5

元素arr[1][1]的首地址(相当于&arr[1][1]):*(arr+1)+1=2686688

元素arr[1][1]的值:arr[1][1]=6

元素arr[1][2]的首地址(相当于&arr[1][2]):*(arr+1)+2=2686692

元素arr[1][2]的值:arr[1][2]=7

元素arr[1][3]的首地址(相当于&arr[1][3]):*(arr+1)+3=2686696

元素arr[1][3]的值:arr[1][3]=8

================

第2行的首地址(相当于&arr[2]):arr+2=2686700

元素arr[2][0]的首地址(相当于&arr[2][0]):*(arr+2)=2686700

元素arr[2][0]的首地址(相当于&arr[2][0]):*(arr+2)+0=2686700

元素arr[2][0]的值:arr[2][0]=9

元素arr[2][1]的首地址(相当于&arr[2][1]):*(arr+2)+1=2686704

元素arr[2][1]的值:arr[2][1]=10

元素arr[2][2]的首地址(相当于&arr[2][2]):*(arr+2)+2=2686708

元素arr[2][2]的值:arr[2][2]=11

元素arr[2][3]的首地址(相当于&arr[2][3]):*(arr+2)+3=2686712

元素arr[2][3]的值:arr[2][3]=12

================

直接利用指针变量名来操作():

元素arr[0][0]的首地址:&arr[0][0]=2686668

元素arr[0][0]的值:arr[0][0]=1

元素arr[0][1]的首地址:&arr[0][1]=2686672

元素arr[0][1]的值:arr[0][1]=2

元素arr[0][2]的首地址:&arr[0][2]=2686676

元素arr[0][2]的值:arr[0][2]=3

元素arr[0][3]的首地址:&arr[0][3]=2686680

元素arr[0][3]的值:arr[0][3]=4

================

元素arr[1][0]的首地址:&arr[1][0]=2686684

元素arr[1][0]的值:arr[1][0]=5

元素arr[1][1]的首地址:&arr[1][1]=2686688

元素arr[1][1]的值:arr[1][1]=6

元素arr[1][2]的首地址:&arr[1][2]=2686692

元素arr[1][2]的值:arr[1][2]=7

元素arr[1][3]的首地址:&arr[1][3]=2686696

元素arr[1][3]的值:arr[1][3]=8

================

元素arr[2][0]的首地址:&arr[2][0]=2686700

元素arr[2][0]的值:arr[2][0]=9

元素arr[2][1]的首地址:&arr[2][1]=2686704

元素arr[2][1]的值:arr[2][1]=10

元素arr[2][2]的首地址:&arr[2][2]=2686708

元素arr[2][2]的值:arr[2][2]=11

元素arr[2][3]的首地址:&arr[2][3]=2686712

元素arr[2][3]的值:arr[2][3]=12

================

Process returned 0 (0x0) execution time : 0.897 s

Press any key to continue.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: