liangmeisheng 发表于 2021-2-6 22:31:28

问题

程序没法正常运行
#include<iostream>
using namespace std;
typedef struct
{
        int x;
        int y;
}Node;
main()
{
       Node * n1;
        n1->x = 0;
        cout<<n1.x;


}




--------------------------------
Process exited after 2.543 seconds with return value 3221225477
输出这个

PC_ 发表于 2021-2-7 06:57:18

问题不大, 但还是犯了一个比较典型的错误:
你创建一个指针n1, 没有申请内存就直接赋值, 这样是非法的, 把代码改成如下就不会报错了:
#include <iostream>
using namespace std;

typedef struct
{
        int x;
        int y;
} Node;
int main()                                 //这里的main函数最好给个返回类型, 如果不给也不会报错
{
        Node *n1 = new Node;
        n1->x = 0;
        cout << n1->x;                //这里推荐改成->

        return 0;
}

一叶枫残 发表于 2021-2-7 14:40:18

本帖最后由 一叶枫残 于 2021-2-7 14:43 编辑

补充一下上面的答案,
Node *n1 = new Node中的new有3个作用:获取内存空间、调用构造函数、返回正确的指针,也就是这一句话执行了
Node *n1= (Node*)malloc(sizeof(Node))
然后在c++里面定义了一个结构体,可以直接使用结构体名称创建,不用typedef,于是简化后如下
#include <iostream>

using namespace std;

struct Node
{
        int x;
        int y;
};

int main()
{
        Node *n1 = new Node;
        n1->x = 0;
        cout << n1->x;                                //注意,在一些编译器如dev_c++是不可以使用点操作符来进行结构体的输出,会报错
       
        return 0;
}
加油!!

CrazySteve 发表于 2021-2-7 22:14:57

struct是一个特殊的类,里面的变量和方法都是public
页: [1]
查看完整版本: 问题