首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >传递struct*并在其他函数中加载结构

传递struct*并在其他函数中加载结构
EN

Stack Overflow用户
提问于 2012-11-19 02:46:10
回答 2查看 4K关注 0票数 0

它不编译,我不知道我到底做错了什么。当我试着做:

代码语言:javascript
运行
复制
(ultimo->siguiente)=nnodo; 

编译器不允许我。也不起作用:

代码语言:javascript
运行
复制
scanf("%d", &(nnodo->dni));

PD: baja和modif函数仍未完成,但它们不应与主程序产生任何冲突。

编译器输出(Visual 2010):

错误2错误C2037:“siguiente”的左侧指定未定义的结构/联合'stru‘c:\documents和设置\emiliano\桌面\asdc.c 52 1 abm

错误3错误C2037:左边的'dni‘指定未定义的结构/联合'stru’c:\文档和设置\emiliano\桌面\asdc.c551abm

4 IntelliSense:指向不完整类类型的指针是不允许的c:\文档和设置\emiliano\桌面\asdc.c 52 3 abm

5 IntelliSense:指向不完整类类型的指针是不允许的c:\文档和设置\emiliano\桌面\asdc.c 55 15 abm

我想我的打字正确,但我真的不知道。

代码语言:javascript
运行
复制
#include <stdio.h>
#include <stdlib.h>

typedef struct stru* pstru;

typedef struct{
    int dni;
    pstru siguiente;
}stru;



pstru alta(pstru ultimo);
pstru baja(pstru ultimo);
pstru modif(pstru ultimo);
int menu(pstru ultimo);

int main(){
    pstru ultimo;
    ultimo=(pstru)malloc(sizeof(stru));

    menu(ultimo);
    return 0;
}

int menu(pstru ultimo){

    int opc;
    printf("Para alta (1), para baja (2), para modif (3), para salir (4)\n");
    scanf("%d", &opc);

    switch(opc){
        case 1:
            ultimo=alta(ultimo);
            break;
        case 2:
            ultimo=baja(ultimo);
            break;
        case 3:
            ultimo=modif(ultimo);
            break;
        case 4:
            return 0;
    }
    menu(ultimo);
    return 0;
}

pstru alta(pstru* ultimo){
    pstru nnodo;
    nnodo=(pstru)malloc(sizeof(stru));
    (ultimo->siguiente)=&nnodo;

    printf("Ingrese DNI\n");
    scanf("%d", &(nnodo->dni));

    ultimo=nnodo;

    return ultimo;
}

pstru baja(pstru ultimo){
    return ultimo;
}

pstru modif(pstru ultimo){
    return ultimo;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-19 06:06:30

在C中,您不能这样做:

代码语言:javascript
运行
复制
typedef struct stru* pstru;

typedef struct
{
    int dni;
    pstru siguiente;
} stru;

您已经定义了一个无标记结构类型,并将其命名为stru,但是typedef struct stru *pstru;引用了一个不同的标记结构类型struct stru,这是不完整的。

你可能需要:

代码语言:javascript
运行
复制
typedef struct stru *pstru;

typedef struct stru
{
    int dni;
    pstru siguiente;
} stru;

这应该是没有问题的编译。

在C++中,您不需要第二个typedef;您只需编写:

代码语言:javascript
运行
复制
typedef struct stru *pstru;

struct stru
{
    int dni;
    pstru siguiente;
};

并定义stru类型。

票数 0
EN

Stack Overflow用户

发布于 2012-11-19 02:52:22

您正在做一些导致alta函数中未定义的行为的事情。

首先,您尝试将stru **分配给stru *。这是编译器不允许的,因为类型不同。

导致未定义行为的部分是使用&nnodo,即获取局部变量的地址并尝试存储它。这将无法工作,因为局部变量在堆栈上,并且当一个函数返回它的堆栈时,编译器会回收它的堆栈,以供其他变量和函数使用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13446992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档