void和void有什么区别
Whats the difference between void* and void *
可能重复:
在C中,为什么星号在变量名之前,而不是在类型之后
声明指针;星号在类型和名称之间的空格的左边还是右边?
我已经使用指针有一段时间了,并且曾经声明像这样的指针
int *x;
但通过一些代码注意到,在某些情况下,*似乎在数据类型之后,比如
void* setValue(){
/* */
}
区别是什么以及为什么像一样使用
语义上什么都没有。这就是风格。
将星号放在变量旁边的优点是防止了这种常见的错误:
char* str1, str2;
/* str2 is a char, not char* ! */
char *str1, *str2;
/* ok */
这个问题在返回类型中是不存在的,所以它在那里更不重要。
这与a+b
和a + b
之间的区别完全相同,即没有区别。空白区没有任何意义,除非它需要分离令牌。
没有区别,在某些情况下最好将其保持在右侧:
int* p1,p2;
看起来像p1和p2的ara指针,而只有p1是,
int *p1,p2;
现在它看起来更好了一点,但好的风格是将它拆分为单独的行:
int *p1;
int p2;
没有语义差异。
通常建议将*
保留在类型旁边,因为x
的实际类型是void *
。然而,这在语法上是错误的,因为C/C++将星号绑定到变量名。
int *x, y; // declare one pointer to int x and one int y
就我个人而言,我尽量将*
保持在中间
int * x;
指向void
的指针,记为void*
,是一个通用的不透明指针。您可以传递它(作为参数、结果、通过变量、字段…)并进行比较,但获得指向数据的唯一方法是适当地强制转换。不适当的强制转换是未定义的行为,可能会使程序崩溃。
至于表示类型中指针的*
之前或之后的空间,这是一种风格。除了作为标记分隔符(*
本身就是一个标记)之外,空格实际上并不重要。
我强烈建议与间距保持一致。您可以使用诸如indent
之类的工具来缩进源代码(向其传递-T
选项有助于对类型名称进行良好的缩进)。GNU indent
工具正在规范空间,并有许多选项来调整其行为(您可以将它们放在.indent.pro
文件中)。对于C++代码,请考虑使用astyle
而不是indent
。
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- "(void) cast"与功能有什么区别 "__attributes__"来沉默未使用的参数警告?
- "void function()"和"void *function()"有什么区别?
- C++ - 在线程中使用时,将函数的返回值声明为 void/void* 之间有什么区别吗?
- 类型转换时C++ (void *) 变量和 (void *&) 变量有什么区别
- void和void有什么区别
- C++中void函数和非void函数之间的区别
- "C++ void Pointer"和"C# var"的区别
- C++:contructor() 和 constructor(void) 之间的区别
- void() 和 void{} 有什么区别?
- void(int) 和 void (*)(int) 之间的区别
- 在c++中,VOID和VOID有区别吗
- void(int) 和 void(*)(int) 有什么区别?
- "void f1(const class &c)"和"void f2(class const &c)"有什么区别?
- Qt5中的void QSqlQuery::clear()和void QSqlQuery::finish()之间有什么区别
- 没有参数和C++中的void参数有什么区别
- 如果两者都以相同的方式工作,那么使用 void func(struct myStruct s) 和 void func(myStruct s) 有什么区别?
- (void*) 和 (void(*)(参数类型)) 强制转换有什么区别
- C++中 void(*)() 和 void(&)() 的区别