C陷阱与缺陷<1>指针与数组

数组与指针

在初学数组与指针的时候,也就是大一,看的是谭浩强老师的书,当时学数组指针之前觉得并没有什么难的,但是看到数组与指针就完全蒙了,什么&,*符号还有不同的含义??看了C陷阱与指针,总算了解了一些。

对于C中的数组,需要注意的是:

1.c中只有一维数组,而所谓的二维数组其实就是一个一维数组,只不过这个数组中的每一个元素都是一个新的数组。类似于这种的嵌套就可以实现多维数组;

2.任何一个数组下标运算都等同于一个对应的指针运算,所以完全可以用指针操作来操作数组。


3.数组的元素的类型可以是千奇百怪的。例如:

struct{
   int a;
   float k[3];
} x[5];

这个例子当中,x是一个有5个元素的数组,而其中的每个元素都有着一个整型常量和一个长度为3的数组。


指针的定义
任何指针都是指向某种类型的变量。
int *p;/*定义p为一个指针*/
int i;
p = &i;/*将i的地址给p指针*/

这里的&操作符的作用是取地址,这样p指针就指向了i的内存单元。

而如果一个指针指向的是一个数组的某个元素,那么给指针加减就相当于指向这个元素的后前元素。

例如:

int *p;
int a[5];
p = a;

这里的a指的就是a[0]的地址,也就是数组中的第一个元素的地址,注意,这里不能写成p = &a,因为a已经是一个地址了。

那么p就被初始化为指向a[0],那么p+1就指向a[1],p+2就指向a[2],以此类推。


*操作符

即是引用,其实可以简单的把它看成取该指针所指向的地址的值。

例如:

int *p;
int a[3] = { 3,2,1 };
p = a;
printf("%d", *(p + 2));

这个例子打印出来的值即是1。

二维数组

正如前面所介绍的,二维数组实际上是以数组为元素的数组。

例如:

int calendar[12][31];
int *p;
int i;

这里的calendar是一个有着12个数组类型元素的数组,它的每个数组类型元素又是一个有着31个整形元素的数组,我们可以把calendar[4]看成一年中的第五个月。

p = calendar[4];
这个语句使指针p指向了数组calendar[4]中下标为0的元素,也就是说这儿calendar[4]只是一个名字,类似于之前的a[3]的a。类似的,calendar[4]+7也就是calendar[4]这个数组中的第7个元素的地址,*(calendar[4]+7)也就是这个数组中的第7个元素的值。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值