我想请教关于二维数组的指针地址的问题。

我理解行指针和单个元素的指针是分层关系就是小区和住户的关系。a+1就是下一个小区的地址。*(a)+1就是这个小区下一个住户的地址。可是计算机内部是线性内存啊,(地址应该是... 我理解行指针和单个元素的指针是分层关系就是小区和住户的关系。a+1就是下一个小区的地址。*(a)+1就是这个小区下一个住户的地址。可是计算机内部是线性内存啊,(地址应该是简单的线性增加吧?)怎么实现这种区分的呢?像进制一样前面加符号? 展开
 我来答
自我编程
2017-12-14 · 科技优质答主
自我编程
采纳数:1481 获赞数:4283

向TA提问 私信TA
展开全部

比如a[3][3]={"a1","b2","c3"}

按顺序 a[0][0],a[0][1],a[0][2],a[1][0],a[1][1],a[1][2],........a[2][2]

其中 a ,a+1,a+2表示 3个连续地址的地址常量 补充!(数组名不=指针,数组名是常量指针,不能改变其值)

分别指向3个连续地址的首地址,分别&a[0][0]-&a[0][2]首地址;&a[1][0]-&a[1][2]首地址;&a[2][0]-&a[2][2]首地址

所以*(a)[0]='a'    *(a+1)[0]='b'    *(a+2)[0]='c'

补充!!!说得多不如上图

#include<stdio.h>
int main()
{
    char a[3][3]={"a1","b2","c3"};
    printf("       a=0x%x\n",(unsigned)a);
    printf("    *(a)=0x%x\n",(unsigned)*(a));
    printf("     a+1=0x%x\n",(unsigned)(a+1));
    printf("  *(a+1)=0x%x\n",(unsigned)*(a+1));
    printf("     a+2=0x%x\n",(unsigned)(a+2));
    printf("  *(a+2)=0x%x\n",(unsigned)*(a+2));

    printf("&a[0][0]=0x%x\n",(unsigned)(&a[0][0]));
    printf("&a[0][1]=0x%x\n",(unsigned)(&a[0][1]));
    printf("&a[0][2]=0x%x\n",(unsigned)(&a[0][2]));
    printf("&a[1][0]=0x%x\n",(unsigned)(&a[1][0]));
    printf("&a[1][1]=0x%x\n",(unsigned)(&a[1][1]));
    printf("&a[1][2]=0x%x\n",(unsigned)(&a[1][2]));
    printf("&a[2][0]=0x%x\n",(unsigned)(&a[2][0]));
    printf("&a[2][1]=0x%x\n",(unsigned)(&a[2][1]));
    printf("&a[2][2]=0x%x\n",(unsigned)(&a[2][2]));

    return 0;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式