指针通常和数组一起使用;//单独的数组名,如a相当于第一个元素的地址,即&a[0];数组名是数组的首元素地址。指针变量+1,其结果相当于加1个其指向的字节数;int *p=(int *)5;p...
指针通常和数组一起使用;
//单独的数组名,如a相当于第一个元素的地址,即&a[0];
数组名是数组的首元素地址。
指针变量+1,其结果相当于加1个其指向的字节数;
int *p=(int *)5;p++;
最后p==9;//int类型占4个字节;
char *q=(char *)5;q++;p==6;
- int a[10]={};
- int *p = a;
- int i;
- for(i=0;i<10;i++){
- scanf("%d",a[i]);//这里的a[i]可以换成p+i;因为p+1的地址就是a[1]的地址... 换成p+i,只是把每个元素的地址取出来,如果要取元素,就要写成*(p+i);
- }
- return 0;
每次都用*(p+i);取值!特别麻烦,这时人们就就发明了一个代替+i取* 的运算符;就是中括号运算符;
*(p+3)=0;代表p[3]=0;
*(p+n)==p[n];
数组中也一样适用:
a[3]=9; 相当于*[&(a[0])+3]=9;即*(p+3)=9;
int main(){
int a[4]={1,3,4,5};
printf("%d",a[3]);
printf("%d",3[a]);
//两者相等;因为中括号运算符;
//a[3]==*(a+3);
//3[a]==*(3+a);
}
指针是地址变量;
数组名是地址常量;
它就代表着a[0]的地址,这也就解释了,数组为什么不能整体赋值;
int main(){
int a[10]={1,2,3,4,5};
int *p=a;
a[1]=2;
*(a+1)=2;
*(p+1)=2;
p[1]=2;
}
上边四个式子都一样,因为 方括号运算符本身就是+i取*
学员评论