欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

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

时间:2023-04-26
一、什么是数组?

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

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。