我正在编写一个程序来了解动态列表在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
的行。但我之前清楚地宣布了它。
答案 0 :(得分:1)
C中的标识符区分大小写。将ptrNode NuovoEl;
重命名为ptrNode Mtesta;
即可。
除此之外,你没有在main
初始化ptrNode Mtesta = primoEl;
。将其更改为{{1}}。