指针与一维数组之间的关系
一、数组指针:指向数组首地址的指针
特点:
1、允许指针加一个整数,+1表示指针指向了数组当前元素相邻的下一个元素
2、允许指针减一个整数,-1表示指针指向了数组当前元素相邻的前一个元素
3、允许指针进行自增自减运算,如p++,++p、p--,--p
4、使用指针来循环遍历数组写法为 *(a+i)或者 *(p+i)a为数组名,p为指针,使用数组的下标来循环遍历数组,写法为:a[i]
5、当p1和p2都指向同一数组中的元素时,允许指针相减 ,值是数组地址的差值,可用于判断指针变量指向的元素是否连续,如果差值的绝对值为0则连续;
#include <stdio.h>
#include <stdlib.h>
int main()
{
//定义一个数组
int a[4] = {1,2,3,4};
//定义一个指针并指向数组的首地址
int *p = a; //也可以写成 int *p = &a[];
int i;
//打印出数组的每个元素
for(i = 0; i < 4; i++)
{
printf("a[%d] = %d\n",i,a[i]);
}
//打印出地址
printf("数组a的a[0]地址: = %p\n",&a[0]);
printf(" 数组a的首地址: = %p\n",a);
printf(" 指针p的地址: = %p\n",p);
system("pause");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
//定义一个数组
int a[4] = {1,2,3,4};
//定义一个指针并指向数组的首地址
int *p = a; //也可以写成 int *p = &a[];
int i;
//打印出数组的每个元素
for(i = 0; i < 4; i++)
{
printf("a[%d] = %d\n",i,a[i]);
}
//打印出地址
printf("数组a的a[0]地址: = %p\n",&a[0]);
printf(" 数组a的首地址: = %p\n",a);
printf(" 指针p的地址: = %p\n",p);
//指针p加减一个整数测试
printf("让指针p加1之后为:%d\n",*p+2);
//指针p加减一个整数测试
printf("让指针p加1之后为:%d\n",*p);
int j;
//指针p自增自减
for(j = 0; j < 4; j++)
{
printf("a[%d] = %d\n",j,*p++);
}
system("pause");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[5] = {1,2,3,4,5};
int *p = a; // 定义一个指针并指向a
//让p1指向数组的第四个元素
int *p1 = p+3;
printf("%d,%d\n",*p,*p1);
//指针之间的减法运算,值为地址的差值
printf("p1-p = %d\n",p1-p);
printf("p1-p = %d\n",p-p1);
system("pause");
return 0;
}
二、指针数组
指针数组:一个数组元素的值为指针则称为指针数组,指针数组是一组有序指针的集合。
一般形式:
类型说明符 * 数组名 [数组长度];例如:int *p [ 3 ] = {&a,&b,&c};
特点:p是数组的首地址,又是变量a的地址
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a = 3, b = 4, c = 5;
//定义一个指针数组
int *pa[3] = {&a,&b,&c};
//打印数组的第一个元素的值
printf(" &a = %p\n",&a);
printf(" pa[0]= %p\n",pa[0]);
//打印数组的首地址
printf(" pa = %p\n",pa);
printf("&pa[0]= %p\n",&pa[0]);
//打印出a的值
printf(" *(&a)= %d\n",*(&a));
printf("*pa[0]= %d\n",*(pa[0]));
system("pause");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a = 3, b = 4, c = 5;
//定义一个指针数组
int *pa[3] = {&a,&b,&c};
//打印数组的第一个元素的值
printf(" &a = %p\n",&a);
printf(" pa[0]= %p\n",pa[0]);
//打印数组的首地址
printf(" pa = %p\n",pa);
printf("&pa[0]= %p\n",&pa[0]);
//打印出a的值
printf(" *(&a)= %d\n",*(&a));
printf("*pa[0]= %d\n",*(pa[0]));
//使用数组名访问a的值
printf(" a = %d\n",**pa);
system("pause");
return 0;
}