2012-03-30 56 views
3
  1. 通过引用而不是按值来引入性能有什么好处?我这样说是因为如果你通过引用传递,你正在创建一个4字节的指针,但是如果你按值传递,你将创建一个4字节的值。所以他们都占用额外的4个字节,对吧?
  2. 是否有可能通过引用传递一个int字面量使用强制类型:(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; 
    } 
    
+2

表达式'* a ++'增加_pointer_,而不是它指向的内容。如果你想增加你需要使用'(* a)++'的值。 – 2012-03-30 09:52:51

+2

我不敢相信即使编译。你不能接受一个整型文字的地址。 – JeremyP 2012-03-30 10:27:29

回答

8

通过逐指针的优点(有C中没有参考文献)是一个函数可以更新原始int,即,在它返回一个值。没有性能优势;相反,传递指针可能会降低程序速度,因为指向的int必须位于可寻址的内存中,所以它不能位于寄存器中。

请注意,&(int *)5不符合您的想法。 (int *)5将值5转换为指针,将其解释为内存地址。 &会给这个指针的地址,除了采取临时地址是非法的。你的意思可能是

int i = 5; 
func1(&i); 
+0

比我的回答更快,更清晰,更准确。尼斯。 – brice 2012-03-30 09:58:16

+0

传递指针是否真的创建一个4字节的指针并通过值传递创建一个4字节的副本?因此,这两种方法在内存中使用额外的4个字节? – 2012-03-30 10:22:12

+0

优秀的答案。 – JeremyP 2012-03-30 10:28:56