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