没有在C中通过引用调用?

我知道,标题有点奇怪。当然,我知道如何在C语言中进行按引用调用。我的问题很简单,解决方案也很简单。我目前正在阅读我大学的一些脚本,他们明确地写 “在C语言中不使用按呼叫引用”

由于我(认为我)知道如何用C进行引用调用,所以我有点困惑,希望您能为我提供帮助。

我通常对“按引用呼叫”一词有什么误解吗?还是下面的代码实际上是通过调用引用

void test(int* p) {
    *p = 5;
}

int main(int argc,char *argv[]) {
    int i = 2;
    test(&i);
    printf("i = %i\n",i);
    end;
}

另一种解释是,按引用调用是一种不好的做法。例如,Java不允许通过引用调用非对象。但是由于C也不是面向对象的,所以对我来说毫无意义(也许还有结构)

还是脚本实际上是错误的?

提前谢谢!

xuexiaojuanxxj13400 回答:没有在C中通过引用调用?

C中没有像C ++中那样的变量引用的概念。在小示例中显示的内容仅仅是使用指针(或变量地址)。但是,您传递的是值(变量的地址)而不是引用(变量名的别名)。

,
  

还是脚本实际上是错误的?

您的代码没有错。

此调用test(&i);实际上是通过指针(而不是通过引用)传递的。在C语言中,没有关于引用的概念。 &是地址操作符,不是引用。

按引用传递概念仅在C ++中适用,这意味着传递对象本身(而不是传递对象的副本)。即使如此,对test的调用也会有所不同:test(i); // pass-by-reference而不是test(&i); // pass-by-pointer

,
  

“在C中不使用按呼叫引用”

这是完全错误的说法。

每种编程语言都有其自己的术语。在C中通过引用进行调用或通过引用进行传递意味着通过对象的指针间接传递。

当有人说C时却使用其他语言中引入的术语引用定义的术语时,就会出现这种错误的陈述。

根据C标准(6.2.5类型)

  

指针类型可以从函数类型或对象类型派生,   称为引用类型指针类型描述了一个对象,该对象的   值提供对引用类型的实体的引用。   从引用类型T派生的指针类型有时被称为   ‘T的指针’。从引用中构造指针类型   类型称为“指针类型派生”。指针类型是   完整的对象类型。

因此,当使用引用类型处理引用的对象时,C中的引用传递表示上述上下文。它不是一个规范术语,但是在C语言中用于指定通过指针将对象传递给函数的这种方法。

在您的程序中

#include <stdio.h>

void test(int* p) {
    *p = 5;
}

int main(int argc,char *argv[]) {
    int i = 2;
    test(&i);
    printf("i = %i\n",i);
    end;
}

您正在通过指针表达式i通过引用传递对象&i。因此,该表达式*p = 5;更改了被引用对象,该引用对象是在C术语中通过引用传递的。

,

参考是在C ++中使用的概念,但在C中不使用。 在C语言中,当要操纵“按引用”结构而不是使用“按值”参数传递机制时,我们通常使用指针并将其指定为地址。 您的代码很好。当您开始为变量分配内存时,指针问题通常发生在C语言中。之后出现的问题是什么代码负责释放分配的内存块。顺便说一下,任何时候使用ponter编写函数时,都应该测试它是否不为空

    void test(int* p) {
        if(p != NULL) {
            *p = 5;
        }
    }

    int main(int argc,char *argv[]) {
        int i = 2;
        test(&i);
        printf("i = %i\n",i);
        // end; // this is not a C instruction
        exit(0);
    }
本文链接:https://www.f2er.com/3030102.html

大家都在问