2 qq 33447655 qq_33447655 于 2016.01.26 06:24 提问

这个指针数组我已经晕菜了

#include
#include
void main(void)
{
/*声明创建指针数组*/
int A[2][3][4]={{{1,2,3,4},{5,6,7,8},{9,10,11,12}},{{13,14,15,16},{17,18,19,20},{21,22,23,24}}};

int * pA=A[0][0];                         /*为指针变量赋值*/
for(int i=0;i<2;i++)                      /*第一维*/
    for (int j=0;j<3;j++)                   /*第二维*/
        for(int k=0;k<4;k++)               /*第三维*/
            printf("%d ",*(pA+i*3*4+j*4+k)); /*遍历输出*/
        pA=A[0][0];                                 /*使pA重新指向数组开头*/
        printf("\n");                                 
        for(int m=0;m<sizeof(A)/sizeof(int);m++)
        {
            printf("%d ",*pA);
            pA++;
        }
        getch();
        }

我用单步执行。一个一个的问:
图片说明
首先看图 那个值1245076是什么东西?这不是内存地址啊。

3个回答

caozhy
caozhy   Ds   Rxr 2016.01.26 06:45

int x = (int)(int *)&A[2][3][4];
加上这行,看的很清楚,那个值是地址。

caozhy
caozhy 任何一个值,都可以用16进制表示,也都可以用10进制表示。
接近 2 年之前 回复
caozhy
caozhy 回复qq_33447655: 和0x没有关系,0x是16进制的意思。
接近 2 年之前 回复
qq_33447655
qq_33447655 内存地址不是都是0x开头的吗?
接近 2 年之前 回复
qq_27183003
qq_27183003   Ds   Rxr 2016.01.26 07:11

右击可以选择十六进制或十进制切换。
A[2][3][4]应该是个随机的值。反正是越界的东西,你也不用,不必专研。

John_ToStr
John_ToStr   Rxr 2016.01.26 09:24

c/c++中数组下标是从0开始的,A[2][3][4]是个随机值。你能正确访问的范围是 000~233,知道吗?

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!