C++数组指针的问题
答案:4 悬赏:30 手机版
解决时间 2021-05-14 22:38
- 提问者网友:自食苦果
- 2021-05-14 18:25
#include <iostream>
using namespace std;
void main()
{
int n[4][4] = {11, 22, 33, 44,
55, 66, 77, 88,
123, 234, 345, 456,
567, 678, 789, 890};
int (*p)[4];
p = n; // p = &n[0]
for (int i = 0; i <= 3; i++)
cout << *p[i] << endl;
cout << "-----------------------------------" << endl;
for (int i = 0; i<= 3; i++)
{
for (int j = 0; j<= 3; j++)
cout << "n[" << i << "][" << j << "] = " << *p[i] << endl;//这里有问题
*p++;
}
system("pause");
}
我想问一下, 用cout << "n[" << i << "][" << j << "] = " << p[i][j] << endl则可以正确输出数值, 但是p不是一个指针么?那么p就可以看成一个数组, 那么p[i][j]不就是三维数组了么, 怎么会输出正确的呢?
还有一个疑惑, 如果不用p[i][j], 而用递加p的内存地址, 然后取地址的数值, 这个方法应该怎么写呢?
最佳答案
- 五星知识达人网友:话散在刀尖上
- 2021-05-14 18:52
指针的本质是存储了存放数据的地址;而数组则是用固定的地址存放数据;
如:int a[10];
int *p;
p=a;//等价于p=&a[0],也就是把数组a的初始地址赋给了指针p,那么p[1]=a[1]
上面程序中p是一个指针数组,是包含四个指针的一维数组。
所以p[i]是一个指针,从而p[i][j]就是第i个指针中的第j个数据(注:i和j都是从0开始算起的)。
p[i][j]可以看作是一个二维数组,首先作为数组是一维(行),而一维指针又可看作一维(列)。
按内存取地址可以这样:
int m=0,n=0;
m=4*4;//二维数组的总个数
for(;n<m;n++)
cout<<*(p[0]+n);
全部回答
先看这个简单的
#include <iostream>
using namespace std;
int main()
{
int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
int (*p)[3]=a;
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++) //外层控制行访问,内层控制列访问
{
cout<<*(*(p+i)+j)<<":"<<*(p+i)+j<<ends;
}
cout<<endl;
}
return 0;
}
- 2楼网友:平生事
- 2021-05-14 20:59
&p[i][j]的结果是这样的
n[0][0] = 0012FF40
n[0][1] = 0012FF44
n[0][2] = 0012FF48
n[0][3] = 0012FF4C
n[1][0] = 0012FF50
n[1][1] = 0012FF54
n[1][2] = 0012FF58
n[1][3] = 0012FF5C
n[2][0] = 0012FF60
n[2][1] = 0012FF64
n[2][2] = 0012FF68
n[2][3] = 0012FF6C
n[3][0] = 0012FF70
n[3][1] = 0012FF74
n[3][2] = 0012FF78
n[3][3] = 0012FF7C
- 3楼网友:零点过十分
- 2021-05-14 19:34
1。数组名== 指针,所以p[i][j] == n[i][j](你可以看内存地址,他们两一样的)
2。你直接调试了看么,看数组地址都可以看的,你想打出来直接取个地址符,我试试因该可以
#include <iostream>
using namespace std;
void main()
{
//////////////////////////////
int n[4][4] = {11, 22, 33, 44,
55, 66, 77, 88,
123, 234, 345, 456,
567, 678, 789, 890};
///////////////////////////////
int (*p)[4];
p = n; // p = &n[0]
///////////////////////////////
for (int i = 0; i <= 3; i++)
cout << *p[i] << endl;
cout << "-----------------------------------" << endl;
//////////////////////////////
for (int i = 0; i<= 3; i++)
{
for (int j = 0; j<= 3; j++) //括号别贪方便省略!!!好的习惯是基础
{
cout << "n[" << i << "][" << j << "] = " << &p[i][j] << endl;//这样就可以取地址了
}
//*p++; //你这步很没必要,想干什么啊!!!!!
}
system("pause");
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯