从函数写入时链表状态不变
linked list state unchanged when writing to it from a function
我在使用一个非常简单的函数时遇到了问题,我必须创建一个链表,每个节点都存储一个字符串中的一个字符,我为此创建了一个函数,但是它似乎什么也没做全部
这就是我正在谈论的函数(变量名称是西班牙语,对此我很抱歉):
struct listaDoble crearMiADN()
{
char miDni[] = "1234";
struct listaDoble listado = crearLista(strlen(miDni));
struct nodo *actual = listado.first;
for(int i = 0; i<strlen(miDni); i++)
{
if(miDni[i] != '[=10=]' && miDni[i] != EOF)
{
actual->tuNombre[0] = miDni[i];
actual->tuNombre[1] = '[=10=]';
actual = actual->next;
}
}
return listado;
}
这是有效的函数 crearLista
,但您可能需要它来理解我的代码:
struct listaDoble crearLista(int num_nodos)
{
struct listaDoble *result = (struct listaDoble *)malloc(sizeof(struct listaDoble));
if(num_nodos > 0)
{
result->first = (struct nodo *)malloc(sizeof(struct nodo));
result->first->prev = NULL;
struct nodo *actual = result->first;
struct nodo *prev = NULL;
struct nodo *last;
for(int i = 0; i < num_nodos; i++)
{
if(i + 1 != num_nodos)
{
actual->next = (struct nodo*)(malloc)(sizeof(struct nodo));
actual->prev = prev;
actual = actual->next;
prev = actual;
}
else
{
actual->next = NULL;
actual->prev = prev;
last = actual;
}
}
result->last = last;
result->size = num_nodos;
}
else
{
result->first = NULL;
result->last = NULL;
result->size = 0;
}
return *result;
}
在评论中要求
struct listaDoble
{
struct nodo *first, *last;
int size;
};
现在这就是我对 crearMiADN
事物的称呼
struct listaDoble dni = crearMiADN();
现在预期的结果是这样的
NULL<-- [1] <-> [2] <-> [3] <-> [4] --> NULL
然而这就是我得到的
NULL<-- [] <-> [] <-> [] <-> [] --> NULL
我不太喜欢指针,我修复它的尝试实际上是在某个地方放一个 * 看看它是否有效(剧透警报,它没有)
像这样
struct listaDoble dni = *crearMiADN(); //type mismatch
然后我尝试修复我这样做的类型不匹配
struct listaDoble crearMiADN()
//...//
return *listado;
}
这又一次出错了,现在我几乎无法尝试将 * 随机放在某个地方并检查它是否编译和工作
您正在尝试 return 局部变量。您应该分配该内存块和 return 指针。请按如下方式更正代码,然后重试。
struct listaDoble* crearMiADN()
{
char miDni[] = "1234";
struct listaDoble *listado = crearLista(strlen(miDni));
...
return listado;
}
struct listaDoble* crearLista(int num_nodos)
{
struct listaDoble *result = (struct listaDoble *)malloc(sizeof(struct listaDoble));
...
return result;
}
我在使用一个非常简单的函数时遇到了问题,我必须创建一个链表,每个节点都存储一个字符串中的一个字符,我为此创建了一个函数,但是它似乎什么也没做全部
这就是我正在谈论的函数(变量名称是西班牙语,对此我很抱歉):
struct listaDoble crearMiADN()
{
char miDni[] = "1234";
struct listaDoble listado = crearLista(strlen(miDni));
struct nodo *actual = listado.first;
for(int i = 0; i<strlen(miDni); i++)
{
if(miDni[i] != '[=10=]' && miDni[i] != EOF)
{
actual->tuNombre[0] = miDni[i];
actual->tuNombre[1] = '[=10=]';
actual = actual->next;
}
}
return listado;
}
这是有效的函数 crearLista
,但您可能需要它来理解我的代码:
struct listaDoble crearLista(int num_nodos)
{
struct listaDoble *result = (struct listaDoble *)malloc(sizeof(struct listaDoble));
if(num_nodos > 0)
{
result->first = (struct nodo *)malloc(sizeof(struct nodo));
result->first->prev = NULL;
struct nodo *actual = result->first;
struct nodo *prev = NULL;
struct nodo *last;
for(int i = 0; i < num_nodos; i++)
{
if(i + 1 != num_nodos)
{
actual->next = (struct nodo*)(malloc)(sizeof(struct nodo));
actual->prev = prev;
actual = actual->next;
prev = actual;
}
else
{
actual->next = NULL;
actual->prev = prev;
last = actual;
}
}
result->last = last;
result->size = num_nodos;
}
else
{
result->first = NULL;
result->last = NULL;
result->size = 0;
}
return *result;
}
在评论中要求
struct listaDoble
{
struct nodo *first, *last;
int size;
};
现在这就是我对 crearMiADN
事物的称呼
struct listaDoble dni = crearMiADN();
现在预期的结果是这样的
NULL<-- [1] <-> [2] <-> [3] <-> [4] --> NULL
然而这就是我得到的
NULL<-- [] <-> [] <-> [] <-> [] --> NULL
我不太喜欢指针,我修复它的尝试实际上是在某个地方放一个 * 看看它是否有效(剧透警报,它没有)
像这样
struct listaDoble dni = *crearMiADN(); //type mismatch
然后我尝试修复我这样做的类型不匹配
struct listaDoble crearMiADN()
//...//
return *listado;
}
这又一次出错了,现在我几乎无法尝试将 * 随机放在某个地方并检查它是否编译和工作
您正在尝试 return 局部变量。您应该分配该内存块和 return 指针。请按如下方式更正代码,然后重试。
struct listaDoble* crearMiADN()
{
char miDni[] = "1234";
struct listaDoble *listado = crearLista(strlen(miDni));
...
return listado;
}
struct listaDoble* crearLista(int num_nodos)
{
struct listaDoble *result = (struct listaDoble *)malloc(sizeof(struct listaDoble));
...
return result;
}