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

来源:互联网 发布:人工智能的原理 编辑:程序博客网 时间:2024/06/06 13:13

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;}
0 0
原创粉丝点击