C基础-2 数组指针测试

void test1()
{
    int a[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
    int(*p)[4];
    p = (int(*)[4])a;
   
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 4; j++) printf("%d、", p[i][j]); //或者 *(*(p+i)+j) 或者 *(p[i]+j)
        printf("
");
    }
}

数组指针,指的是数组名的指针,即数组首元素地址的指针。即是指向数组的指针。例:int (*p)[4]; p即为指向数组的指针,又称数组指针

输出:

 1、换成如下代码输出结果改变

void test1()
{
    int a[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
    int(*p)[2];
    p = (int(*)[2])a;
   
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 4; j++) printf("%d、", p[i][j]); //或者 *(*(p+i)+j) 或者 *(p[i]+j)
        printf("
");
    }
}

 

 

 2、换成下面代码,跳过2个元素

 3、下面代码一次跳过4个元素

 可见定义(*p)[n]中n的大小,影响数组方式取值和自身地址计算。

4、下面这个代码输出和直接按数组方式使用是不一样的

 

1、建了一个小群:616945527(软件), 欢迎大家加入,加群口令abc123,硬件嵌入式开发者推荐75764412(单片机)。
闲置域名www.nsxz.com出售(等宽等高字符四字域名,可组合多种有意义词语)。
原文地址:https://www.cnblogs.com/zhaogaojian/p/14673226.html