C语言之数组与指针

本文探讨了一维数组和指针的关系,解释了数组名和指针的差异,以及如何通过下标法和指针法访问数组元素。同时,介绍了二维数组的概念,包括其内存布局和指针操作。内容深入浅出,适合初学者理解数组和指针的基本概念。
摘要由CSDN通过智能技术生成

一、一维数组和指针

1.定义一个一维数组,数组名是这个数组的首地址。

int a[5];      / / 5表示有五个元素a[0],a[1],a[2],a[3],a[4],不是指从a[0]到a[5]。

a指向a[0], a[0]为int类型元素,所以a的类型是int*。

a这个地址指向a[0] int元素,int*;4   (一个元素四个字节)

&a这个地址指向整个数组 int*[5]; 20 

  2.a和&a的区别:

int a[5];

printf("a=%d\n",a)
 
printf("&a=%d\n",&a)

printf("a+1=%d\n",a+1)       //偏移四个字节
 
printf("&a+1=%d\n",a+1)      //偏移20个字节

其中第一段和第二段输出代码输出结果相同,即值相同。但仅在值上同为a[0]的首地址,前者指向数组首地址,后者指向整个数组(具体由第三第四段输出代码的偏移结果可以看出)。

3.访问数组元素

a)下标法:a[i];

b)指针法:

int a[5]={1,2,3,4,5};

int *p= a;          //p指向a[0]

for (int i=0;i<5;i++)

{   

printf("%d",*(p+1));       //当为*(p+1)时遍历,p不会变;用*p++时,则p会变!

//因为p指向a[0],所以可以将*(p+1)换成*(a+1),但不能*a++,a为数组名是不能改变的,会报错!

}          //因为*的优先级比+高,故需要先用括号*(p+1),而*和++优先级相同,从右往左;

二、二维数组和指针

 简略画图描述:二维数组a[3][4], 由三个一维数组组成,其中每个一维数组包含四个元素;

a指向a[0]这个一维数组, 故a的类型为int*[4], a+1, 则偏移16个字节;

a[0]指向a[0][0]这个元素,故a[0]的类型为int*, a[0]+1,则4B。

注:a和a[0]在数值上相等,但指向不同!

int a[3][4];

a int*[4];   →指向一维数组,是一个数组指针

&a  int(*) [3][4]    →指向整个数组

a[0]  int*  →指向a[0][0],为一维数组a[0]的首地址

a[0][0]   int类型

多维数组:

int a[2][3][4]:   

a指向二维数组;a[0]指向一维数组;a[0][0]指向一个元素 

以上内容仅为个人学习记录,如有错误,请各位指正,共勉! 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值