开发者社区> 问答> 正文

C语言二维数组名问题

#include <stdio.h>
int main(int argc, const char *argv[])
{
    int a[2][3] = {
        {1, 2, 3}, 
        {4, 5, 6}
    }; 
    
    printf("%p\n", a);
    printf("%p\n", *a);
    return 0;
}

打印的结果是,一样的指针.

a究竟是怎么存储的,怎么会出现a和*a是一样的呢?

展开
收起
a123456678 2016-06-03 18:19:49 1986 0
1 条回答
写回答
取消 提交回答
  • 码农|Coder| Pythonista

    C语言里int a[10]的话,a是一个指针指向a[0]的指针
    C语言里int a2的话,a[0]是一个指向a0的指针,a[1]是一个指向a1的指针
    在你的代码里,int a2

    *a指向a0这个int
    a指向a[0] = {1, 2, 3}这个array。只不过在C里面,array的地址就是array第一个元素的地址,所以在这里a = a[0] = a0
    a是*int[3]的指针,对其进行+1操作,内存指针往后移动sizeof(int[3])个位置
    *a是int指针,对其进行+1操作,内存指针往后移动sizeof(int)个位置
    你可以运行下面代码测试下

    #include<stdio.h>
    
    int main(){
        int a[2][3] = {
            {1, 2, 3},
            {4, 5, 6}
        };
        printf("%p\n", a);
        printf("%p\n", a+1);
        printf("%p\n", (*a+1));
        return 0;                                                             
    }
    2019-07-17 19:27:01
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载