-1

这可能是一个非常简单的问题,但无论如何:我正在使用 VS 2010,我想要的是在最后获得 x****y 的结果。这是我的代码:

#include <iostream>
using namespace std;

void main()
{
    int x = 5;
    int *** y= new int**;
    ***y = 5;
    cout << x****y << endl;
    system("pause");
}

这只会使程序崩溃,我不知道为什么。这是我得到的错误日志:

    1>------ Build started: Project: Stuffing around, Configuration: Debug Win32 ------
    1>  main.cpp
    1>  LINK : D:\Programming Projects\Stuffing around\Debug\Stuffing around.exe not found or not built by the last incremental link; performing full link
    1>  Stuffing around.vcxproj -> D:\Programming Projects\Stuffing around\Debug\Stuffing around.exe
    ========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

此外,是否有一种方法可以在不动态分配内存的情况下达到相同的结果 **y?非常感谢。

4

3 回答 3

2

没有任何动态分配:

int x = 5;    
int i;
int *pi = &i;
int **ppi = &pi;
int ***y = &ppi;
***y = 5;
cout << x****y << endl;

如果没有动态、静态或自动分配,您将无法做到这一点;指针需要指向的东西。

于 2013-07-04T01:01:54.127 回答
2

您的代码将 ptr 动态分配给 ptr 到 int,但不是它需要指向的嵌套 ptr 和 int。(希望所有间接都有意义)要使用动态内存执行此操作,您将需要以下内容:

    #include <iostream>
    using namespace std;

    void main()
    {
        int x = 5;
        int *** y= new int**;
        *y = new int *
        **y = new int
        ***y = 5;
        cout << x* (***y) << endl;
        system("pause");
    }

要在不动态分配内存的情况下做到这一点,您需要这样的东西:

    #include <iostream>
    using namespace std;

    void main()
    {
        int x = 5;
        int y = 5;
        int *y_ptr = &y;
        int **y_ptr_ptr = &y_ptr;
        int ***y_ptr_ptr_ptr = &y_ptr_ptr;
        cout << x* (***y_ptr_ptr_ptr) << endl;
        system("pause");
    }
于 2013-07-04T01:06:15.957 回答
0

Y 未初始化。

y = new int**;
*y = new int*;
**y = new int;
***y = 5;
于 2013-07-04T01:01:17.833 回答