二维数组与数组指针

Posted hchacha

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二维数组与数组指针相关的知识,希望对你有一定的参考价值。

int b[3][2], b是一个数组,b[0]是0行的首地址,b[1]是1行首地址,b[0]可以赋值给int*的指针,即b[i]是一维数组的首地址,b[i][j]访问的i行第j个元素

int *s=b[0]  下面的代码可以遍历数组,输出每个元素的首地址

for (int i = 0; i < 6; i++)                    
{
cout << s << " ";
cout << *s++ << endl;

}

for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 2; j++)
cout << &b[i][j] << endl;
}

二维数组名不是个2级指针,int **p=b,无法编译,b的类型是int(*)[2] ,b是个指针,指向一个数组,b与b[0]不同,b[0]的类型是int* ,虽然b[0]也是0行的首地址

int (*ptr)[2] ; ptr=b;  下面的代码可以遍历数组元素

for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 2; j++)
cout << ptr[i][j] << endl;
}

for (int i = 0; i < 3; i++)   每次移动ptr,是移动整行,前面移动s,就是移动一个元素的位置,s是int*,ptr是int(*)[2]
cout << ptr++ << endl;    cout<<b[i]效果和cout<<ptr一样

int(*t)[3][2],t是指针,指向3行2列的数组,b是指向2个元素的数组的指针,t=b不能通过编译 

 

 1     int b[3][2] = { { 1, 2 }, { 2, 3 }, { 3, 4 } };
 2     int(*t)[3][2];
 3     t = &b;
 4     int(*ptr)[2] = b;
 5     for (int i = 0; i < 3; i++)
 6         cout <<  ptr++ << endl;
 7 
 8     int *s = b[0];//
 9     cout << b[0] << " " << b[1]<<" " << b[2] << endl;
10     for (int i = 0; i < 3; i++)
11     {
12         cout << t[i] << " ";
13         cout << *t[i] << endl;
14     }
15     for (int i = 0; i < 6; i++)
16     {
17         cout << s << " ";
18         cout << *s++ << endl;
19         
20     }
21     for (int i = 0; i < 3; i++)
22     {
23         for (int j = 0; j < 2; j++)
24             cout << ptr[i][j] << endl;
25     }

 

以上是关于二维数组与数组指针的主要内容,如果未能解决你的问题,请参考以下文章

指针与一维数组和二维数组以及字符串指针数组的学习笔记

C语言指针指向一维数组与二维数组?

二维数组与数组指针

C 语言二级指针作为输入 ( 二维数组 | 二维数组遍历 | 二维数组排序 )

C语言经验分享:二维指针与二维数组的两种错误用法

C语言中二维数组名是否可以看作指针数组名?