指针未在范围内声明

时间:2016-01-09 16:21:37

标签: c pointers declaration dynamic-list

我正在编写一个程序来了解动态列表在c中的工作原理,这是我的代码:

#include <stdlib.h>
#include <cstddef>
#include <stdio.h>

typedef struct nodo{
    int dato;
    struct nodo *prox;
}node;

typedef node *ptrNode;

int dimLista(ptrNode testa);
void insTesta(int num,ptrNode *testa);

int main(int argc, char** argv) {
    int dim,num;
    // creo la lista
    ptrNode primoEl = NULL;
    // inserisco gli elementi
    insTesta(2,&primoEl);
    insTesta(5,&primoEl);
    insTesta(6,&primoEl);


    ptrNode Mtesta;
    dim = dimLista(Mtesta);

    printf("%d", dim);
    printf("\n\n%d",primoEl->dato);
    printf("\n\n%d",primoEl->prox->dato);

    system("pause");
    return 0;
}

void insTesta(int num, ptrNode *testa) {
    // creo puntatore al nuovo elemento e riservo lo spazio nella memoria          heap
    ptrNode NuovoEL;
    NuovoEl = (ptrNode)malloc(sizeof(node));
    // assegno al nuovo elemento tramite il puntatore il dato e 
    // assegno a prox il contenuto del primo elemento della lista (che é      null per il primo elemento inserito)
    NuovoEl->dato = num;
    NuovoEl->prox = *testa;
    // assegno all'indirizzo del primo elemento l'indirizzo del nuovo  elemento tramite la variabile
    *testa = NuovoEl;
}

int dimLista(ptrNode testa) {

    if (testa == NULL) {
        return 0;
    }

    else return 1 + dimLista(testa->prox);
}

但是我不明白为什么它一直在insTesta void函数中给我一个错误:

  

NuovoEl尚未在范围内声明

malloc的行。但我之前清楚地宣布了它。

1 个答案:

答案 0 :(得分:1)

C中的标识符区分大小写。将ptrNode NuovoEl;重命名为ptrNode Mtesta;即可。

除此之外,你没有在main初始化ptrNode Mtesta = primoEl;。将其更改为{{1}}。