您的位置:首页 > 编程语言 > C语言/C++

个人见解(2)指针和一维数组

2016-12-10 12:31 197 查看
1.利用指针指向数组

指针变量中可以存放另一个变量的地址,而数组在之前的学习中说道数组是内存中一段连续的地址(即按序存放);也就是说我们只要知道数组的首地址,存入指针中,根据指针的运算特性,我们可以知道数组各个元素的地址,并且引用它们;

代码:

int arr[10];
int *p;
p=&arr[2];
p=arr;


定义一个数组和指针p;p=&arr[2],代表p指向了arr[2]的地址,又因为数组名即数组在内存开辟一段连续的地址的首地址,p=arr,代表p指向数组的首地址,当然也可以写成p=&arr[0];又利用*运算符,得出*p==arr[0];

2.利用指针调用数组元素;

了解指针的一个特性:如果指针p指向数组其中的某个元素,那么p+1便指向下一个元素;

通过这个特性,我们就能用指针调用数组中的任意一个元素了;

下面是在我几本书中收集的指针和数组的对应关系:

首先定义:

int a[10],*p;
p=a;


1.数组的第i个元素的地址可以表示成:&a[i] , p+i , a+i

2.数组中第i个元素的值(运算):a[i] , (p+i) , *(a+i)

3.指向数组的指针变量也可以带下标:p[i]==*(p+i)

下面我给出一些等价代码来使用指针来输出数组和接受赋值:

#include <stdio.h>
int main (){
int a[10],*p=a,i;
//  for (i=0;i<10;i++)
//      scanf("%d",&a[i]);
for (i=0;i<10;i++)
scanf("%d",p++); //等价于上面的scanf
//  for(i=0;i<10;i++)
//      printf("%d ",a[i]);
p=a;         // 因为在scanf中指针自加了,这里要让指针重新指向a的首地址
for(i=0;i<10;i++)
printf("%d ",*p++); //等价于上面的printf
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  指针 C语言