C语言| 指针在数组中的移动
【指针的移动】
Q:指针变量如何指向一维数组的其他元素呢?
A:如果指针变量p 已经指向一维数组的第一个元素,那么p+1 就表示指向该数组的第二个元素。
【程序代码1】
如果p指向的是第一个元素的地址,那么*p表示的就是第一个元素的内容。
同理,p+i表示的是第 i+1个元素的地址,那么*(p+i)表示第 i+1个元素的内容。
就是说p+i就是指向元素a[i]的指针,*(p+i)就等价于a[i]。
【程序代码2】
数组名表示数组的首地址,a[i]表示的是数组第i个元素。
如果指针变量也指向这个首地址,可以用p[i]表示数组的第i个元素。
p[i]和*(p+i)是等价的===“指向数组的”指针变量也可以写成“带下标”的形式。
【程序代码3】
数组a表示的是数组的首地址,元素a[i]的地址也可以用a+i表示。
如果指针变量p也指向数组a的首地址,那么 p+i 和 a+i是等价的。
只要是地址,都可以用 *地址 表示该地址所指向的内存单元中的数据。
而且也只有地址前面才需要加*,才能表示具体的数据。
在执行程序的时候,数组先是计算地址,然后转化成指针。
直接使用 *(a+i),执行速度会更快。
【程序代码1】
【指针的移动】
1 p =&a[3];
指针p,指向数组a第4个元素的地址,所以输出*p的结果为44。
2 q = a; q = q+3;
指针q指向数组a的起始地址,q+3表示数组的第4个元素。
3 r = a; 输出*(r+3),表示第4个元素。
*q+i相当于 (*q)+i;
#include <stdio.h>
int main(void)
{
int a[] = {11, 22, 33, 44, 55, 66};
int *p, *q, *r;
p =&a[3]; //第一种写法
printf("*p = %d\n", *p);
q = a; //第二种写法
q = q+3;
printf("*q = %d\n", *q);
r = a; //第三种写法
printf("*(r+3) = %d\n", *(r+3));
return 0;
}
【程序代码2】
C语言| 数组-CSDN博客
数组名表示数组的首地址,a[i]表示的是数组第i个元素。
如果指针变量也指向这个首地址,可以用p[i]表示数组的第i个元素。
p[i]和*(p+i)是等价的===“指向数组的”指针变量也可以写成“带下标”的形式。
#include <stdio.h>
int main(void)
{
int a[] = {11, 22, 33, 44, 55, 66};
int *p =a;
printf("p[0] = %d\n", p[0]);
printf("p[1] = %d\n", p[1]);
printf("p[2] = %d\n", p[2]);
printf("p[3] = %d\n", p[3]);
printf("p[4] = %d\n", p[4]);
printf("p[5] = %d\n", p[5]);
return 0;
}
【程序代码3】
数组a表示的是数组的首地址,元素a[i]的地址也可以用a+i表示。
如果指针变量p也指向数组a的首地址,那么 p+i 和 a+i是等价的。
只要是地址,都可以用 *地址 表示该地址所指向的内存单元中的数据。
而且也只有地址前面才需要加*,才能表示具体的数据。
在执行程序的时候,数组先是计算地址,然后转化成指针。
直接使用 *(a+i),执行速度会更快。
#include <stdio.h>
int main(void)
{
int a[] = {123, 456, 789, 888, 666, 999};
int *p = a;
printf("*(p+3) = %d, *(a+3) = %d\n", *(p+3), *(a+3));
return 0;
}