指针运算符
1.不同类型指针 +1
char* 偏移量一个字节
int * 四个
float* 四个
doudble* 八个
2.不同类型执行解引用操作
char* 执行解引用操作,从指针存储地址开始,往后(地址变大的方向)取一个字节数据
int * 四个
float* 四个
doudble* 八个
-操作
p-1 p-2; p 应该指向一个数组,操作完后,指针应该落在数组范围内
函数使用指针作为参数
(1)值传递:形参是实参的复制平,只能读取实参的数据,在被调函数内部,无法通过修改形参修改实参。基本数据类型的变量,构造类型的变量。
(2)地址传递:形参会接收到实参传递过来的地址,就可以在被调函数内存,通过间接方式,通过修改形参,进而修改实参。传递,数组,指针。
变量,数组,是为了数据的存储
指针,是为了高效的访问数据,间接访问。
字符数组的传参,地址传参
int a[5]={1,2,3,4,5}; printf("arrray addr %p\n",a); //a就是一个指针。 存储的是 a[0]地址 printf("a[0] %p\n",&a[0]); printf("a[1] %p\n",&a[1]); int *p =a ; // p指针和 数组进行关联 , p 中存储了a[0]的地址。 printf("a[0] %d\n",a[0]); printf("point *(p+0) %d\n",*(p+0)); printf("*(a+0) %d\n",*(a+0)); printf("point p[0] %d\n",p[0]); printf("a[0] addr %p\n",&a[0]); printf("point addr *(p+0) %p\n",&(*(p+0))); printf("*(a+0) addr %p\n",&(*(a+0))); printf("point addr p[0] %p\n",&p[0]); /* printf("a[1] %d\n",a[1]); printf("point a[0] %d\n",*(p+1)); 访问方式 a[n] ---> *(p+n) -->*(a+n)---> p[n]