C语言--指针基础--数组与指针(自学2)

一、什么是数组?

  • C语言中的数组属于一种“构造数据类型”;个人理解就是:一组具有相同数据类型的元素的集合,用来表征某个特性。
  • 数组中的每个元素都有编号,默认从0开始,比如有一个这样的数组int a[10],那么该数组就包含了10个元素,分别是a[0],a[1],a[2],......a[9];
  • 通过数组元素的编号(下标)来访问,具体的数组元素。
  • 数组是如何存储的?一个数组申明之后,当程序运行时,就给该数组划分一块存储空间(根据数组的数据类型和长度),这个空间是连续,且由于数据类型是一致的,那么每个数组元素在内存中占用的空间大小也是一致的。如下图,比如说在本系统中,int类型的数据,每个占用4个字节,数组int a[7]的开始地址是2000,则有:

二、指针与数组如何关联?

好了,接上图来说,假设我们申明了一个整型指针变量 int *p,并且p指向数组a[0],那么p+2就应该指向a[2]元素。

由此,就可以通过指针的加法、减法运算来访问该数组中的元素了。

同样的,假设两个指针指向同一个数组时,也是可以使用关系运算符的。比如:

int a[7],*p,*q;
p = &a[0];
q = &a[3];

printf("判断:p的地址大于或等于q的地址在逻辑上为%d\n",p>=q);
printf("判断:p的地址小于或等于q的地址在逻辑上为%d\n",p<=q);

//比较的结果依赖于数组中两个元素的相对位置。需要明确一点的是,只有两个指针都指向同一个
//数组时,比较才有意义。

         由此,可以看出,指针其实就充当了数组元素的下标(角标),如此进行了关联,以此来实现对数组的一些列操作。比如下例中利用指针给数组赋值以及打印数组元素。

int a[10];
int *i;
i = &a[0];

printf("Enter 10 integer numbers: ");
for(;i<&a[10];i++)
scanf("%d",i);

for(i = &a[0];i<&a[10];i++)
printf("%d,",*i);
	
	

        需要注意的是,当指针跟自增或自减运算符结合的时候,需要明确各自的含义。

*p++或*(p++);    //自增前表达式的值为*p,然后自增p
(*p)++;     //自增前表达式的值时*p,然后自增*p
*++p或*(++p)    //先自增p,自增后表达式的值为*p
++*p或++(*p)    //先自增*p,自增后表达式的值为*p

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值