栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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的地址在逻辑上为%dn",p>=q);
printf("判断:p的地址小于或等于q的地址在逻辑上为%dn",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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/744173.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号