1

我正在寻找有关指针的说明。我在 bordland c++ 5.5.1 中编译了以下代码,没有任何错误。但是,当我尝试执行时,会出现核心错误。

int main ()
{
    int x=10,y=20;

     int &a=x;
     int &b=y;

     int *c;
     int *d;

     *c=x;
     *d=y;

return 0;
}

基本上我正在尝试创建两个参考变量(a,b)并分配两个变量(x,y)。之后我创建了两个指针变量(c,d)并尝试分配相同的变量(x,y)。这在执行时而不是在编译时给了我错误。

不管我做错了什么,这不是指针变量的标准分配。为什么此时指针分配失败。请帮助我理解这一点。

第一次更新:

谢谢大家。首先,我了解到我正在研究 C++ 功能(参考变量)。其次,我需要在使用它之前为指针变量分配内存。

4

5 回答 5

7

您发布的代码是 C++,而不是 C。您的问题是您需要使这些指针实际指向某些东西:

int * c = & x;   // make c point at x
* c = 42;        // changes x
于 2009-08-19T10:51:50.563 回答
2

您已将 c 和 d 声明为 int 指针,并且您正在尝试更新它们的指向值,它们没有指向任何有效的地方,因为您从未使用有效内存初始化它们。

试试 c = &x; 然后和c一起玩。

于 2009-08-19T10:52:06.460 回答
2

您正在取消引用无效的指针。'c' 和 'd' 没有分配内存位置,因此将使用以前在内存中的任何内容作为它们的位置。你需要做:

int *c = new int;
int *d = new int;
于 2009-08-19T10:52:40.327 回答
2

在我看来,您对语法并不完全清楚。

键入int *c很棘手,因为看起来您正在声明一个带有 name 的整数*c。然而,这种情况并非如此。这将声明一个指向整数的指针,并且在 C/C++ 中,指向特定类型的指针通过*在类型名称后附加 a 来表示。因此,您使用int*name 声明类型变量(指向整数的指针),c即使间距使其看起来不同。作为记录,打字int* c会产生相同的结果,并且可以说更具可读性。

然后键入*c不引用您的变量,因为它实际上被称为c. 相反,它所做的是取消引用指针:它返回指针指向的任何对象。或者,如果指针无效,则会导致错误。

如果要声明一个指针并将其设置为稍后指向一个对象,则需要执行以下操作:

int *c;

// stuff goes here

c = &x;

&x将返回x's 在内存中的地址,可以将其作为值分配给指针。然后,您可以通过取消引用指针来操作该值:例如*c = 15.

于 2009-08-19T11:13:01.470 回答
0

您已经定义了两个指针变量 c 和 d,但您没有为它们分配任何内存。您需要为它们分配一些内存。

做这个:

int *c = &x;
int *d = &y;
于 2009-08-19T10:52:01.000 回答