我一直困惑于我在大多数C程序中看到的对我而言不熟悉的函数声明。函数名称前的星号函数是什么?
void *func_name(void *param){
...
}
*
暗示该功能是什么?我对变量类型(*
)的理解是,它创建了一个指向另一个变量的指针,因此它能够跟踪后一个变量存储在内存中的地址。但在这个函数的情况下,我不知道这个星号意味着什么。
我一直困惑于我在大多数C程序中看到的对我而言不熟悉的函数声明。函数名称前的星号函数是什么?
void *func_name(void *param){
...
}
*
暗示该功能是什么?我对变量类型(*
)的理解是,它创建了一个指向另一个变量的指针,因此它能够跟踪后一个变量存储在内存中的地址。但在这个函数的情况下,我不知道这个星号意味着什么。
星号属于返回类型,而不是函数名,即:
void* func_name(void *param) { . . . . . }
这意味着,该函数返回一个空指针。
感谢答案的人,但是void指针意味着什么? – Aldee 2012-01-18 13:55:23
这只是内存中某个位置的地址。你不知道它指向什么 - 它取决于你将指针转换为适合以后使用的类型。当然,将它转换为无效类型(例如,让我们假设void *指向一个浮点数,但将其转换为char类型)将产生未定义的结果。 – 2012-01-18 13:56:41
@AldeeMativo:另外,请参阅http://stackoverflow.com/questions/692564/concept-of-void-pointer-in-c-programming – NPE 2012-01-18 13:57:27
*
属于返回类型。该函数返回void *
,指向某些未指定类型的内存位置的指针。
指针本身就是一个变量类型,它的某个内存位置的地址是其值。 C中不同的指针类型表示您希望驻留在指针变量引用的内存位置的不同类型。因此int *
预计指的是可以解释为int
的位置。但是void *
是一个指向未指定类型的内存位置的指针类型。你将不得不施放这样一个无效指针,以便能够访问它指向的内存位置的数据。
这意味着函数返回一个void*
。
即函数返回一个通用指针。 – 2014-08-05 20:43:09
*表示函数的返回类型,即void *
。
在声明指针变量,它是把*
靠近变量名或变量类型相同的事情:
int *a;
int* a;
我个人认为第一选择更加清楚,因为如果你想使用,
分隔定义多个指针,你必须每次都重复*
:
int *a, *b;
使用“封闭式语法”在这种情况下会产生误导,因为如果你写:
int* a, b;
您声明一个指针为int(a
)和int(b
)。
所以,你会发现函数返回类型的语法呢!
是的。我也这么想。谢谢@puller .. – Aldee 2012-01-18 14:37:29
“如果你想使用,运算符定义多个指针”。这被认为是糟糕的编程风格,因为当组合相同类型的指针和变量时会导致错误。解决方案不是混淆你声明指针的方式,解决方案是_declare它自己的一行上的每个变量。不存在任何情况下,在同一行上声明几个变量是有意义的。你要做什么,除了键盘按键?显然,键盘的磨损与代码的可读性相比更为严重... – Lundin 2012-01-18 15:35:00
我从来没有说过我这么做。我说这是选择“接近变量名称”语法的原因,因为它从不会造成混淆。我说这是对函数接口中使用的相同语法的可能解释。 – 2012-01-18 16:45:55
这将是一个非常有趣的问题,要求编写代码的人为什么要将星号放在函数的名称旁边,而不是'void * func_name'或'void * func_name'。如果他们能够提出一个理性的论点为什么,我会留下深刻的印象。 – Lundin 2012-01-18 15:28:04
理性的论点:因为我们习惯于写“int * a”,所以看起来更一致的是对函数做同样的操作。 – Guillaume 2012-01-18 16:28:05
除了Guillaume写的函数外,一个指针是无效的。与'int * a'相同,它指向一个整数,而不是一个整数指针类型。 – dhein 2015-07-17 09:49:47