【问题标题】:basic pointer question in c++ programc++程序中的基本指针问题
【发布时间】:2010-11-20 21:50:38
【问题描述】:

我正在寻找有关指针的说明。我在 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++ 功能(参考变量)。 其次,我需要在使用它之前为指针变量分配内存。

【问题讨论】:

    标签: c++ pointers reference variable-assignment


    【解决方案1】:

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

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

    【讨论】:

    • 所以赋值“int &a=x;” C 不支持。如果我错了,请纠正我。
    • "int & a = x" 声明一个引用 - 引用是 C++ 的一部分,而不是 C。
    • 谢谢 Neil,问题是,我使用的是 cpp 编译器,默认情况下,文件以 cpp 扩展名存储,因此编译时支持所有 c++ 功能
    • 您可能需要考虑切换到 MinGW 编译器并使用 Code::Blocks IDE - 请参阅 codeblocks.org
    【解决方案2】:

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

    这样做:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

        • 或者将它们指向一些有效的内存,例如c = &x(设置 c 使其指向与 x 相同的内存,就像 "int &a=x" 设置 a 指向与 x 相同的内存)
        • 如果您以这种方式为它们分配内存,请确保在完成它们后不要忘记清除内存。用途:删除c;删除 d;还有在 C 中执行此操作的方法: int *c = (int *)malloc(sizeof(int));完成后:free(c);
        【解决方案5】:

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

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

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

        如果你想声明一个指针并将它设置为稍后指向一个对象,你需要这样做:

        int *c;
        
        // stuff goes here
        
        c = &x;
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-10-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-01-19
          • 2021-12-01
          相关资源
          最近更新 更多