char *charPtr = malloc(50);
char *charPtr; *charPtr = malloc(50);
我一直在用C创建指针,就像上面的例子一样。可以说这两个在C中是一样的吗?
答案 0 :(得分:3)
可以说这两个在C中是一样的吗?
不,您需要初始化指针。
char *charPtr = malloc(50); // initialization
或者,您首先声明,然后分配:
char *charPtr; // declaration
charPtr = malloc(50); // <-- assignment - do NOT add * here as the you already declared `charPtr` as a pointer
请注意,这样做(第二种情况)是错误的:
char *charPtr;
*charPtr = malloc(50); // <-- WRONG, the * here is deference operator
答案 1 :(得分:2)
char *charPtr;
*charPtr = malloc(50);
你是
*
在这里扮演两个不同的角色,第一种情况是
char *charPtr;
它只是表明charPtr
是一个指针,而在
*charPtr = malloc(50);
它是取消引用运算符。
当然,*
也是乘法运算符,但编译器的解释取决于它出现的上下文。
答案 2 :(得分:1)
没有。第一个声明base_id = row[0][0..4]
spouse = individuals.select { |individual| individual.ind_id[0..4] == base_id }.first
作为指向charPtr
的指针,它包含char
的返回值。
第二个声明malloc
作为指向charPtr
的指针。然后它表示值char
指向的值应设置为charPtr
的返回值。这是错的。指针未初始化,并指出它应指向的是未定义的行为。此外,将malloc
分配给void *
应生成编译器诊断。