指针数组与数组指针

时间:2020-03-15 21:45:23   收藏:0   阅读:70

关于数组指针:

1  对于二维数组,初始化时,必须指定一个参数:   int a [][3] ={{1,2,3},{1,2,3},{1,2,3}}, int a[][] ={} 这样是不允许的。 对于一位数组

int a[] = {},这样可以。也就数说只有一个参数位置可以不用设置参数。

2   int (*p)[3]      必须加上小括号,这代表一个指向数组的指针,数字3,代表每一列有三个数。这样就定义了一个,二位数组。

p[0]代表第一行的第一个数的地址,p[1]代表第二行的第一个数的地址,p[2]代表第三行的第一个数的地址,注意与一位数组的

区别,对于一位数组p[0]代表第一个数字的实际值,而不是地址,但是对于二维数组p[0]代表的却是一个地址,要想得到这个地址的值

还要加上*号,如:*(p[0]),这代表第一行的第一个数字的实际值,也可以这样表达: a[0][0],这种表达方式就与一维数组的表达方式一样了。a[0][0] 就相当于 *(*(a+0)+0) ,  相当于 *(a+0)[0], 相当于*(a[0]+0), 全都是在表达二位数组的第一行的第一个数的实际值,而不是地址值。

总结: 二位数组的指针的使用方式依旧是从一位数组的指针的使用方式来的,即:在一维数组中a[0]=*(a+0),

在二维数组中a[0]已经不再表示实际值了,而是表示地址值,但是a[0][0]=*(*(a+0)+0), 依旧表示的是实际值而不是地址,这还是相当于一维数组。

#include<stdio.h>
int main()
{
    int a[][2]={{1,2},{3,4}};
    printf("1这是第一行第一个元素的值:%d\n",a[0][0]);
    printf("2这是第一行第一个元素的值:%d\n",*(*(a+0)+0));
    printf("3这是第一行第一个元素的值:%d\n",(*(a+0))[0]);
    printf("4这是第一行第一个元素的值:%d\n",*(a[0]+0));
    printf("-------------\n");
    printf("这是第一行第一个元素的地址:%d\n",a[0]);
    printf("这是第一行第一个元素的数值:%d\n",*(a[0]));

    return 0;
}

技术分享图片

 

原文:https://www.cnblogs.com/zijidefengge/p/12499567.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!