是否可以使用cast:(int *)通过引用传递int文字?或者你必须将指针传递给int?请参阅下面的示例代码:
int func1(int *a){
(*a)++; // edited from comment by Joachim Pileborg
printf("%i\n", *a);
return 0;
}
int func2(int a){
a++;
printf("%i\n", a);
return 0;
}
int main(void){
func1(&(int *)5); // an int literal passed by reference using a cast ?
func2(5);
return 0;
}
答案 0 :(得分:9)
传递指针(C中没有引用)的好处是函数可以更新原始int
,即返回其中的值。没有性能优势;而且,传递指针可能会降低程序的速度,因为指向的int
必须位于可寻址的内存中,因此它不能在寄存器中。
请注意,&(int *)5
不符合您的预期。 (int *)5
将值5
强制转换为指针,将其解释为内存地址。 &
将给出该指针的地址,除了获取临时地址是非法的。你可能意味着
int i = 5;
func1(&i);