c ++程序中的基本指针问题

时间:2009-08-19 10:49:44

标签: c++ pointers reference variable-assignment

我正在寻找关于指针的澄清。我在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 ++特性(引用变量)。 其次,我需要在使用之前为指针变量分配内存。

5 个答案:

答案 0 :(得分:7)

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

int * c = & x;   // make c point at x
* c = 42;        // changes x

答案 1 :(得分:2)

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

尝试c =& x;然后玩c。

答案 2 :(得分:2)

您正在取消引用无效指针。 “c”和“d”未分配内存位置,因此将使用以前在内存中的任何内容作为其位置。你需要这样做:

int *c = new int;
int *d = new int;

答案 3 :(得分:2)

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

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

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

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

int *c;

// stuff goes here

c = &x;

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

答案 4 :(得分:0)

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

这样做:

int *c = &x;
int *d = &y;