通过指针引用数组
数组元素的(指针)实际上就是数组元素的地址,引用数组元素的值可以有下标法,或指针法。
#include<stdio.h>
int main(){
int a[10]={1,2,3,4,5,6,7,8,9,0};
int *p;
p=a;
printf("%d\n",a[0]); //变址运算符
printf("%d\n",*p);
printf("%d\n",a[5]);
printf("%d\n",*(a+5));
printf("%d\n",*(p+5)); //*p+5
printf("%d\n",p);
printf("%d\n",p+1); //1个单位
return 0;
}
1.指针变量p
指向数组下标为0的元素,也就是说指针变量p
中存放的时数组a
第0
号元素的地址,p=0
或p=&a[0]
;
2.如果指针p
进行p=p+1
,(或p++
)运算表示在同一个数组中指针变量p
指向下一个元素。
3.如果指针p
进行p=p-1
,(或p--
)运算表示在同一个数组中指针变量p
指向上一个元素。
4.p+i
和a+i
的含义是相同的,表示数组元素a[i]
的内存地址,为&a[i]
。
注意:[]
为变址运算符,a[i]
的本质就是按照a+i
计算处元素的内存地址后,再取出该地址内存单元的值。
例题:将数组中a中n个整数按照相反顺序存放到数组a中
#include<stdio.h>
int main(){
void fun(int a[],int n);
int a[10]={1,2,3,4,5,6,7,8,9,0};
fun(a,10);
for(int i=0;i<=9;i++){
printf("%d",a[i]);
}
return 0;
}
void fun(int a[],int n){
int i,j;
int temp;
for(i=0,j=n-1;i<n/2;i++,j--){
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
方法二:
#include<stdio.h>
int main(){
void fun(int *a,int n);
int a[10] = {1,2,3,4,5,6,7,8,9,0};
fun(a,10);
for(int i=0;i<=9;i++){
printf("%d ",a[i]);
}
return 0;
}
void fun(int *a,int n){
int *i,*j;
int temp;
for(i=a,j=a+n-1;i<a+n/2;i++,j--){
temp = *i;
*i= *j;
*j= temp;
}
}