一、数组基本概念
数组是用来存储一组数据类型的构造数据类型
特点:只能存放一种类型的数据,数组里的数据成为元素
二、数组和指针的不同之处
说到数组,基本都会和指针扯上关系。
但是数组和指针是截然不同的
通过下面这张图片,我们应该知道数组名其实是一个指针常量(不可被改变)
三、数组元素的两种访问方法:下标访问和间接访问
(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;
}
运行结果(分析包含进去了):
答案是否想的和你一样呢?