一个数组包含若干个元素,每个元素在内存中占用储存单元,它们都有相应的地址,指针变量能指向变量,也可以指向地址。所谓数组元素的地址,也就是数组元素的指针。
文章目录
前言
在C语言中,数组名代表数组首元素的地址,于是这两种写法是等价的
一、在引用数组元素时指针的运算
P+1指向同一数组中的下一个元素,P-1指向同一数组中的上一个元素,并不是简单的加一,而是+上一个数组元素的字节数。整型+4,double 占8个字节。
代码如下:
int main()
{
int i = 0;
int arr[5] = { 1,2,3,4,5 };
int* p = arr;//数组名是首元素地址
for (i = 0; i < 5; i++)
{
printf("%p\n", p + i);
}
return 0;
}
运行结果:
这里每个地址之间相差4,因为整型变量是4个字节。
代码如下:
int main()
{
int i = 0;
int arr[5] = { 1,2,3,4,5 };
int* p = arr;//数组名是首元素的地址
for (i = 0; i < 5; i++)
{
printf("%p--->%p\n", p+i,&arr[i]);
}
return 0;
}
运行结果:
指针加一,加的是一个元素所占空间的大小,元素名是首元素的地址。
p+i = arr+i = &arr[i]
二、通过指针引用数组元素
1.用指针打印数组
代码如下(示例):
int main()
{
int i = 0;
int arr[5] = { 1,2,3,4,5 };
int* p = arr;//数组首元素地址
for (i = 0; i < 5; i++)
{
printf("%d\n", *(p + i));
//printf("%d\n", *(arr + i));
//printf("%d\n", arr[i]);
}
return 0;
}
printf("%d\n", *(p + i));
printf("%d\n", *(arr + i));
printf("%d\n", arr[i]);
都能打印数组元素,通过下标的方式最直观
通过p++也能打印 ,这种方法更简洁,高效
2.指针-指针
代码如下(示例):
int main()
{
int i = 0;
int arr[5] = { 1,2,3,4,5 };
int* p1 = &arr[0];//数组首元素地址
int* p2 = &arr[4];
printf("%d\n", p2 - p1);
return 0;
}
运行结果:
如果指针p1和p2指向同一数组中的元素,那么p1-p2得到的是数组的元素个数
三、用数组名作函数参数
“*”是解引用操作符,对指针进行解引用操作,得到的是对应变量所占空间的内容(也就是它的值)
故:
*(p+i) = *(arr+i) = *&arr[i] = arr[i] 得到的是数组的元素
例:用指针对10个整数按由小到大排序
代码如下:
总结
(未完待续.....)
标签:arr,--,元素,int,数组,printf,指针 From: https://blog.csdn.net/2401_88850882/article/details/144314876