c - 通过引用与通过值传递 int 的好处?

标签 c

  1. 按引用而不是按值传递整数是否有性能优势?我这样说是因为如果您通过引用传递,您将创建一个 4 字节的指针,但如果您通过值传递,您无论如何都会创建该值的 4 字节副本。所以他们都多占用了 4 个字节,对吧?
  2. 是否可以使用 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;
    }
    

最佳答案

指针传递(C 中没有引用)的好处是函数可以更新原始 int,即返回其中的值。没有性能优势;相反,通过指针传递可能会减慢您的程序,因为指向的 int 必须位于可寻址内存中,因此它不能位于寄存器中。

请注意,&(int *)5 并不像您认为的那样。 (int *)5 将值 5 转换为指针,将其解释为内存地址。 & 会给出该指针的地址,除了获取临时地址是非法的。你可能是说

int i = 5;
func1(&i);

关于c - 通过引用与通过值传递 int 的好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9940643/

相关文章:

创建新节点,该节点是文档的父节点

c - 如何使用中断?

在 C 中计算时间跨度

c - 无法在多线程程序中捕获 SIGINT 信号

c - GtkWindow 未加载小部件

c - 在 C 中进行无替换采样以用于 R 代码

c - 大端和小端差异的位运算

c - 我的代码中出现未知错误

c - 从 bash 运行时,for 循环在 c 文件中被跳过

c - 当指针出现在变量(指针*)的末尾时,这意味着什么?