1.数组首地址=数组名=数组首个元素的地址
#include <stdio.h>
int main()
{
int arr[3] = {1,2,3};
int *p;
p = &arr[0];//数组的首地址就是首个元素的地址
p = arr;//数组名就是数组的首地址
for(int i=0;i<3;i++){
//printf("address:%p,%d \n",(p+i),*(p+i));
printf("%d ",*p);
p++;
}
/*
printf("0元素是:%d\n",*(p+0));//*是取值符,取数组首地址的数值
printf("1元素是:%d\n",*(p+1));
printf("2元素是:%d\n",*(p+2));
*/
return 0;
}
2.通过指针引用数组元素
(1)下标法(2)指针法:a.偏移;b.取内容
#include <stdio.h>
int main()
{
int arr[3] = {1,2,3};
int *p;
p = &arr[0];//数组的首地址就是首个元素的地址
p = arr;//数组名就是数组的首地址
for(int i=0;i<3;i++){
printf("address:0x%p,%d \n",(p+i),*(p+i));
}
/*
printf("0元素是:%d\n",*(p+0));//*是取值符,取数组首地址的数值
printf("1元素是:%d\n",*(p+1));
printf("2元素是:%d\n",*(p+2));
*/
return 0;
}
• 见怪不怪:(1)指针当作数组名,下标法访问
(2)数组名拿来加
#include <stdio.h>
int main()
{
int arr[3] = {1,2,3};
int *p = arr;
printf("sizeof arr is %d\n",sizeof(arr));//3*4=12
printf("sizeof p is %d\n",sizeof(p));//OS用8个字节表示一个地址
//printf("%d ",p[2]);
printf("%d \n",*arr);
for(int i=0;i<3;i++){
printf("%d ",p[i]);
}
putchar('\n');
for(int i=0;i<3;i++){
printf("%d ",*(arr+i));
}
putchar('\n');
/*
for(int i=0;i<3;i++){
printf("%d ",*arr++);//编译不过,指针常量
}
*/
return 0;
}
Notes:数组名和指针区别(见上方程序代码)
3.编程实例
(1)函数封装数组初始化,遍历
#include <stdio.h>
void initArray(int *parr,int size)
{
int i;
for(i=0;i<size;i++){
printf("请输入第%i个元素的数据:\n",i+1);
scanf("%d",parr++);
}
}
void printArray(int *parr,int size)
{
int i;
for(i=0;i<size;i++){
printf("%d ",*parr++);
}
}
int main()
{
int arry[5];
int size = sizeof(arry)/sizeof(arry[0]);
initArray(arry,size);//实际参数,数组的首地址:数组名/首元素的地址
printArray(&arry[0],size);
return 0;
}
(2)将数组中的n个元素按逆序存放
#include <stdio.h>
void initArray(int *parr,int size)
{
int i;
for(i=0;i<size;i++){
printf("请输入第%i个元素的数据:\n",i+1);
scanf("%d",parr++);
}
}
void resetArray(int *parr,int size)
{
int i,j;
int tmp;
for(i=0;i<size/2;i++){
j = size-1-i;
tmp = *(parr+i);
*(parr+i) = *(parr+j);
*(parr+j) = tmp;
}
}
void printArray(int *parr,int size)
{
int i;
for(i=0;i<size;i++){
printf("%d ",*parr++);
}
putchar('\n');
}
int main()
{
int arry[5];
int size = sizeof(arry)/sizeof(arry[0]);
initArray(arry,size);//实际参数,数组的首地址:数组名/首元素的地址
printArray(&arry[0],size);
resetArray(arry,size);
printArray(&arry[0],size);
return 0;
}