void*指针
1. void*指针就像一个垃圾桶,他可以接收任何类型的指针。
2.void*指针不能直接进行解引用操作
3.void*指针不能直接进行加减整数运算
const修饰指针
被const修饰的变量不能被改变,但该变量本质上还是变量,你可以理解为常变量。我看如下代码,来理解以下const修饰指针变量的效果。
int a = 0; const int* p = &a; int const * p = &a; int* const p = &a;
第二行代码:首先const修饰的是*p,*p指向的是a空间,我们不能通过*p来改变a空间的值。但const并没有修饰我的指针变量p,所以我能改变p的值,也就是说我可以改变p所指向的对象。
第二行代码和第三行代码的效果相同
第四行代码:这次const修饰的是p,也就是说*p指向的a可以改变,而p所指向的地址不可以改变。
数组与指针
数组名
数组名在大多数情况下表示的是数组首元素的地址,但又两个例外,
1.sizeof(数组名), 这里的数组名表示的是整个数组的地址
2.&数组名,这里的数组名表示的是整个数组的地址
数组首元素的地址与数组的地址在值上是相等的,但二者检索和跳跃的权限(大小)是不一样的,用数组首元素的地址检索,只能检索该元素。同样,也只能跳过该元素。而用数组的地址检索和跳跃的权限是整个数组。