【C和指针】第八章(1)-->一维数组

一、数组基本概念

数组是用来存储一组数据类型的构造数据类型

特点:只能存放一种类型的数据,数组里的数据成为元素

二、数组和指针的不同之处

说到数组,基本都会和指针扯上关系。

但是数组和指针是截然不同的

通过下面这张图片,我们应该知道数组名其实是一个指针常量(不可被改变)

三、数组元素的两种访问方法:下标访问和间接访问

(1)下标访问

这个就是我们平常所用的访问方式

比如一段通过循环初始化数组的例子:

#include<stdio.h>
int main()
{	
	int i = 0;
	int  str[10];//定义一个整形数组 
	for (i = 0; i<10; i++)//利用下标访问来初始化数组 
	{
		str[i] = i;//初始化成0 1 2 3 4 5... 
	}
	for (i = 0; i < 10; i++)//打印数组元素 
	{
		printf("%d ", str[i]);
	}
	return 0; 
}

(2)间接访问

所谓的间接访问方法,就是利用指针

看下面这段代码,也可以实现上面例子的初始化:

#include<stdio.h>
int main()
{	
	int i = 0; 
	int  str[10];
	int* ps = str;//定义一个指向int型的指针变量ps,并给他赋值为str[0]的地址 
	for (ps = str; ps<str+10; ps++)//ps<str+10表示的是ps的指针还没越过str[9]时,进行循环;ps++表示ps指向下一个元素的地址 
	{
		*ps = i++;//通过解引用来对数组元素进行访问,效果是赋值为i; 
	}
	for (i = 0; i < 10; i++)//打印数组,和原代码相同 
	{
		printf("%d ", str[i]);
	}
	return 0; 
}

(3)两种访问方式的效率问题

指针有时会比下标更有效率,前提是正确被引用。

但一般情况下,效率相差并不是很大

所以为了方便程序被更好的阅读,还是多用下标访问的方式写吧

间接访问也应理解,掌握

四、下标引用的有趣之处

下标引用,有时也可以用指针表达式来代替

来看下面的代码:

#include<stdio.h>
int main()
{		
	int i = 0;
	int  str[10];
	int* ps = str;
	for (ps = str; ps<str+10; ps++)
	{
		*ps = i++;
	}
	for (i = 0; i < 10; i++)
	{
		printf("%d ", str[i]);
	}                                                                                                                       
	//*********************上面这部分没有变化******************************//       	
	ps = str;
	printf("\n2[str] = %d", 2[str]);
	printf("\n*(ps + 1) = %d   --->这个1指的是str[1]的1", *(ps + 1));
	printf("\n*ps + 1 = %d     --->这个指的是str[0]的0 之后加1", *ps + 1);
	printf("\nps[1] = %d	   --->这个指的就是str[1]的1", ps[1]);
	printf("\nps[0] = %d	   --->指的是str[0]的0", ps[0]);
	printf("\nps+5 = %d		   --->这个指的是str[5]的地址", ps+5);
	printf("\nstr+5 = %d",str+5);
	printf("\n&str[5] = %d", &str[5]);
	printf("\n");
	return 0;
}


 

运行结果(分析包含进去了):

答案是否想的和你一样呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值