Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
指针、引用、C_C - Fatal编程技术网

指针、引用、C

指针、引用、C,c,C,我学的第一门编程语言是Actionscript,我很难理解指针和引用 当我只能使用引用时,指针的用途是什么?我读过指针的一个用例,它是给另一个函数一个大变量,而不是复制它,但是我不能在前面加一个&这样它就可以像指针一样工作吗 我知道知道知道/传递某物的内存地址有多大帮助,但我不明白为什么会有& 编辑:我的意思是引用使用&如果您还没有,我建议您查看视频。他们以温和的方式提供了丰富的信息。。。而且很有趣 C没有引用。像Java和ActionScript这样的语言——尽管AS所基于的ECMAScrip

我学的第一门编程语言是Actionscript,我很难理解指针和引用

当我只能使用引用时,指针的用途是什么?我读过指针的一个用例,它是给另一个函数一个大变量,而不是复制它,但是我不能在前面加一个&这样它就可以像指针一样工作吗

我知道知道知道/传递某物的内存地址有多大帮助,但我不明白为什么会有&


编辑:我的意思是引用使用&

如果您还没有,我建议您查看视频。他们以温和的方式提供了丰富的信息。。。而且很有趣

C没有引用。像Java和ActionScript这样的语言——尽管AS所基于的ECMAScript在规范中没有提到引用——使用术语reference本质上是指始终引用有效对象的指针[值]

C没有引用。它有指针。指针更为基本和原始,不能保证它们指向有效的对象

还注意到,Java、ActionScript和C在Java中传递对象或在C中传递指针时都是一个更好的高级术语。在Java中,当您将对象传递给方法时,底层实现传递表示对象的引用值:in非常类似于将指针值传递给C中的函数


快乐编码。

C没有引用,它们是C++的特性。C有指针,这些指针本质上是保存内存地址的特殊变量。当您使用*运算符取消对指针的引用时,您告诉编译器您希望指针中存储的地址处的值。&运算符表示'address of',因此&i表示变量i的地址

// create an integer variable holding the value 1
int i = 1;

// create a pointer to an integer and set the value of the pointer to the address of i
int * ptr = &i

// print the value at the address pointed to by ptr by dereferencing the pointer
printf("%i\n", *ptr); // prints 1

您可以将指针视为一个引用,因为它在值的大多数用例中都指向一个实例。当然,指针可以指向与指针组成的位数相匹配的任何内存地址,这使得C很容易出错。

C中的引用是指针,因此当您通过引用传递时,您将参数的地址提供给函数

void foo(mybigStruct *p);

mybigstruct S;

foo( &S ); // passing S by reference which is the same as

mybigstruct *p = &S;

foo( p ); // p points to address of S

与只将参数复制到函数的值传递不同,通过referenceptr传递允许函数修改其参数,因为函数可以直接访问传递的数据所在的特定内存地址的原始位置,即在上面的示例中,可以由foo修改S。

指针和&-构造没有区别。指针是存储&…值的变量

int a;
int *b = &a;

技术上,C++中指针和引用是相同的,只有指针。概念上的区别是引用保证表示有效对象,而指针可以表示无效对象空指针。使用指针还是引用是一个非常有情境性的问题,也是一个品味的问题。

指针和引用之间的一个很大区别是指针可以为空。这可用于附加信息,例如在函数调用中。引用始终需要其引用的备份。因此,如果函数的参数可以为null,则将使用指针,否则引用更合适 另一件事是函数的返回值。从理论上讲,您可以返回对函数局部变量的引用,但程序很可能会崩溃,因为该函数已从堆栈中删除,引用将不再有可用的备份。在这种情况下,必须使用指向新分配内存的指针。 另一个用例是指向指针的指针,例如作为函数的参数。然后,该函数可以在原始指针处分配数据 事实上,c语言中的指针是一个巨大的主题,陷阱和最佳用途最好通过实践来学习和理解

当我只能使用引用时,指针的用途是什么?我读 指针的一个用例是将一个大变量赋给另一个变量 函数,而不是复制它,但是我不能在前面添加一个&吗 它就像一个指针

好的,这里有一个大变量:

struct foo {
   int a[10000];
} biggie;
在这里,我们通过在函数前面添加&将其传递给函数:

some_function(&biggie);
但是函数是什么样子的呢

void some_function(struct foo* ptr)
{
    ...
}

请参阅,&biggie是一个文本指针,它是biggie的地址,ptr是一个变量指针,可以指向任何结构foo。

在函数中,可以递增/递减指针参数;不能更改引用参数。后者可以防止你射中自己的脚。我怀疑引用、Java和C是在管理层意识到他们的大量程序员永远无法正确使用指针时发明的,他们注定要在应用程序中永远追踪内存泄漏、使用释放的指针错误等

引用也更容易阅读“ref.field”而不是“ref.field” ptr->字段'。因此,我尽可能使用引用而不是指针

如果函数正在分配内存,则双指针似乎更自然:

void foo(char **ptr)
{   *ptr = (char *)malloc(1000);
}
引用声明似乎是向后的:

void bar(char * &ptr)    // I would have expected char &*ptr ?
{    ptr = (char *)malloc(1000);
}

我认为你在谈论C++和C时,你把指针和引用做了比较。引用是一个C++特性;C只有指针。@gladoscc也许你可以发布一些代码来编辑主要问题?我相信你的意思是&表示运算符的地址,但一个真实的例子会更清楚地说明你的问题。因此,如果函数的参数可以为null,则将使用指针,否则引用更合适。-这是一个C问题,不是C++。C没有引用。首先,这不是C++问题,所以C++的回答是偏离点。第二,指针和引用在C++中是不相同的,在技术上或其他方面。我建议您阅读它,理论上指向一个值的实例-在C中,指针不需要指向一个值的实例。。。它可以合法地指向一个值的内部,甚至指向刚刚超过一个值的地址。因此,理论上来说,这是一个词,但可能这不是最好的用法。通常,大多数开发人员,包括那些需要询问&运算符的开发人员,都希望他们的指针指向结构或其他变量的实例。事实上,使用这个词是错误的,因为C的唯一理论是由标准定义的。你说的是实践,不是理论。