/*指针与数组的特点*/
#include <stdio.h>
int main(){
/*
2.指针可以运算.但仅限于加减运算.运算的实质就是地址运算.即地址的移动.
int arr[3]={1,2,3};
int *p=arr;//int *p=&arr[0]
int a=*p;
//a=*(p+1);//等效于:int *p1=&arr[1]; a=*p1;
int *p1=&arr[1];
a=*(p1+1);//p1的值并没有改变.
printf("p1=%p\n",p1);
p1=p1+1;//赋值之后才改变了
printf("p1=%p\n",p1);
a=*(p1-1);
printf("%d\n",a);
*/
/*
3.地址(+1)向高位移动,而(-1)向低位移动.
不同指针类型移动一位(+1或-1)的字节数不同.
4.实际移动的字节数看指针类型,类型占多少个字节,一位就移动多少个字节.
char arr[3]={'a','b','c'};
char *c=&arr[1];//char *c=arr;
//printf("c=%p\n",c);
//printf("%c\n",*c);
//c=c+1;
//c=c-1;
//printf("c=%p\n",c);
//printf("%c\n",*c);
//\*(c+1)等效于:c[1+1]
//(*注意)仅当指针c为第一个元素指针时可以与arr互换.
printf("%c\n",arr[3]);//数组越界会有警告
printf("%c\n",c[2]);//指针只管移动,不管是否越界
*/
/*指针的运算移动时,只在在内存区域内不受限制*/
int b=2;
int a=0;
int *p=&a;
printf("%d\n",*p);
p=p+1;
printf("%d\n",*p);
}
|
|