考虑以下2个声明.
* 出现在数据类型旁边而不是变量旁边
char* ptr1, * ptr2, * ptr3; //all 3 are pointers
Run Code Online (Sandbox Code Playgroud)
* 出现在变量旁边而不是数据类型旁边
char *ptr1,*ptr2,*ptr3; //again all 3 are pointers
Run Code Online (Sandbox Code Playgroud)
两个声明之间的解释是否有任何区别.我知道变量没有区别.
引入void指针的理由是什么?
唯一的区别是空格,它们最终成为指向字符的指针.我个人使用char * ptr1,在我的代码中使用了大量的空格.
无效指针可以指向任何类型的对象并且没有大小.例如,这可行(但不是一个好主意):
int * ptr1;
float * ptr2;
(*ptr1) = 17;
ptr2 = (void*)ptr1;
Run Code Online (Sandbox Code Playgroud)
(*ptr2)现在将ptr1的字节解释为float而不是int,从而得到不同的结果.您可以在不同类型之间切换 void*在指针到函数typedef中也有一些用途.
此外,如果你有char * ptr1做ptr1++,就会增加地址PTR1是指由sizeof(char).对于void*,这是不可能的,它会给你一个编译器错误,说它不知道要递增的大小.