0 0

C语言结构体参数传值10


/*
* List.c
*
*  Created on: 2011-10-24
*      Author: skyfalling
*/
#include<stdio.h>
#include<stdlib.h>
typedef struct LinkNode {
char* value;
struct LinkNode* next;
}*LinkNode;

typedef struct LinkList {
LinkNode head;
LinkNode tail;
LinkNode size;
} LinkList;

LinkNode newNode(char* str) {
LinkNode node = malloc(sizeof(LinkNode));
if (node == NULL) {
printf("内存分配不足\n");
exit(0);
}
node->value = str;
return node;
}

void addNode(LinkList list, char* str) {
LinkNode node = newNode(str);
if (list.head != NULL) {
list.head = node;
list.tail = list.head;
} else {
list.tail = node;
list.tail = list.tail->next;
}
}
int main() {
LinkList list = { NULL, NULL, 0 };
addNode(list, "abc");
addNode(list, "def");
addNode(list, "xyz");
LinkNode p = list.head;
while (p != NULL) {
printf("value=%s\n", p->value);
p = p->next;
}
return 0;
}

上面的代码运行么有反应,C语言的大牛们,给点高见?

问题补充:之前的代码有错误,更新了一下
/*
* List.c
*
*  Created on: 2011-10-24
*      Author: skyfalling
*/
#include<stdio.h>
#include<stdlib.h>
typedef struct LinkNode {
char* value;
struct LinkNode* next;
}*LinkNode;

typedef struct LinkList {
LinkNode head;
LinkNode tail;
LinkNode size;
} LinkList;

LinkNode newNode(char* str) {
LinkNode node = malloc(sizeof(LinkNode));
if (node == NULL) {
printf("内存分配不足\n");
exit(0);
}
node->value = str;
return node;
}

void addNode(LinkList list, char* str) {
LinkNode node = newNode(str);
if (list.head != NULL) {
list.head = node;
list.tail = list.head;
} else {
list.tail-next = node;
list.tail = list.tail->next;
}
}
int main() {
LinkList list = { NULL, NULL, 0 };
addNode(list, "abc");
addNode(list, "def");
addNode(list, "xyz");
LinkNode p = list.head;
while (p == NULL) {
printf("value=%s\n", p->value);
p = p->next;
}
return 0;
}
C 
2011年11月02日 10:07

5个答案 按时间排序 按投票排序

0 0

asyty说的很对,
LinkNode newNode(char* str) {
LinkNode node = malloc(sizeof(LinkNode));
改成:
LinkNode newNode(char* str) {
LinkNode node = malloc(sizeof(struct LinkNode));

typedef struct LinkList {
LinkNode head;
LinkNode tail;
LinkNode size;
} LinkList;
改成:
typedef struct LinkList {
LinkNode head;
LinkNode tail;
int size;
} LinkList;

2011年11月02日 14:06
0 0

改之后的代码

LinkNode newNode(char* str) { 
LinkNode node = malloc(sizeof(LinkNode)); 


改成
LinkNode newNode(char* str) { 
LinkNode node = malloc(sizeof(struct LinkNode)); 



typedef struct LinkList { 
LinkNode head; 
LinkNode tail; 
LinkNode size; 
} LinkList; 


size改int
typedef struct LinkList { 
LinkNode head; 
LinkNode tail; 
int size; 
} LinkList; 

2011年11月02日 13:49
0 0

楼上的,代码错误的地方不止这么点 还有好多。。。

2011年11月02日 13:43
0 0

LinkNode p = list.head; 你这个list.head为NULL,
你这个方法逻辑上有问题吧:
void addNode(LinkList list, char* str) {
LinkNode node = newNode(str);
if (list.head != NULL) {                //这个地方应该是list.head==NULL吧
list.head = node;
list.tail = list.head;
} else {
list.tail = node;
list.tail = list.tail->next;
}
}

2011年11月02日 11:44
0 0

不知道你在写啥。。。。。。
搜一篇C 单链表的代码给你参考下 http://bsr1983.iteye.com/blog/941112

2011年11月02日 10:38

相关推荐

    C语言 结构体范例代码

    传递结构体时,可以考虑传值或者传引用(实际上是指针)。例如,一个计算平均分的函数: ```c void calculate_average(struct Student *student, float *avg) { *avg = student-&gt;grade / 5; // 假设满分100分,取5...

    C语言结构体共2页.pdf.zip

    "C语言结构体共2页.pdf.zip"可能包含关于结构体的基本概念、定义、初始化、指针操作以及结构体数组和结构体指针的使用等内容。下面将详细介绍这些知识点。 1. **结构体定义**: 在C语言中,我们可以通过`struct`...

    C语言中传值与传指针的介绍与区别

    1. **效率**:传值会创建参数的副本,这在处理大对象如结构体时可能会造成不必要的内存开销。如果只需要修改原数据,传指针避免了复制整个对象,提高了效率。 2. **灵活性**:传值只允许函数读取实参,而传指针允许...

    数据结构C语言严蔚敏 c结构体共用体PPT学习教案.pptx

    此外,结构体可以作为函数参数传递,但因为传值的开销,通常推荐使用指针传递结构体。当结构体作为函数返回值时,也需要考虑内存管理和效率问题。 总的来说,理解和熟练使用C语言中的结构体是编程中至关重要的技能...

    对C语言函数参数传递的探讨——以交换问题为例.pdf

    在C语言中,函数调用时的参数传递方式主要分为两种:值传递(Call by Value)和地址传递(Call by Address),也称作传值和传址。 在值传递中,当调用一个函数时,实际参数(实参)的值被复制到形式参数(形参)中...

    contact_C语言_contact_Contact.c_

    10. **结构体指针作为函数参数**:在C语言中,由于结构体的传值效率较低,通常会使用结构体指针作为函数参数来传递结构体实例。 压缩包中的其他文件可能与这个联系人管理系统有关。`2020.c` 可能是另一个源文件,`...

    c语言入门flash课件

    7. **结构体与联合体**:讲解如何创建和操作自定义数据结构,理解内存分配和结构体的传值与传址。 8. **预处理器**:解释宏定义、包含文件等预处理指令的作用。 9. **内存管理**:涵盖动态内存分配(malloc、...

    JNA 复杂结构体传递

    在C语言中,结构体是一种自定义数据类型,可以包含多种不同类型的成员,如整型、浮点型、其他结构体等。在JNA中,我们可以通过创建一个`Structure`的子类来表示C结构体。每个成员对应C结构体中的一个字段,通过`...

    C语言程序设计:第11章 结构体与联合体A.pdf

    当传递结构体给函数时,需要注意传值调用的开销,通常建议使用指针传递。 11.2 结构体数组: 结构体可以被用来定义数组,如`struct date arr[10];`,数组中的每个元素都是一个结构体。结构体数组也可以作为函数参数...

    C语言程序设计教程第8章结构体等构造数据类型.ppt

    结构体可以作为函数参数传递,也可以作为函数的返回值。传递时需考虑传值还是传址,因为结构体较大,通常采用传址方式。 7. **联合体**: 联合体(Union)是一种特殊的结构体,所有成员共享同一块内存空间,允许...

    二级C语言南开上机100题

    16. 结构体指针:通过指针操作结构体,实现结构体的传值与引用。 17. 结构体数组与结构体链表:利用结构体数组实现数据的批量存储,用链表实现动态数据结构。 七、文件操作 18. 文件打开与关闭:使用fopen和...

    13 结构体与共同体实验

    5. **结构体作为函数参数**:将结构体作为函数参数传递,学习传值与传引用的区别。 6. **共同体的使用**:创建并操作共同体变量,理解内存共享的特性。 7. **内存管理**:讨论结构体和共同体在内存分配和释放上的...

    C语言中函数的参数传递.pdf

    C语言作为一款功能强大的编程语言,被广泛应用于软件开发领域,其函数参数的传递方式是实现函数功能和编写高质量程序的关键技术之一。本文将详细探讨C语言中各种类型数据的参数传递机制,包括参数传递的时间、操作、...

    第7节-结构体.pdf

    结构体在函数参数传递时,由于C语言的传值特性,如果直接传递整个结构体会导致较大的开销。因此,推荐传结构体的地址,即使用指针: ```c void print1(struct S s); // 不推荐的方式,整个结构体被复制 void print2...

    C语言函数大全,相当详尽的C函数介绍

    - **传值调用**:C语言默认采用传值调用,这意味着函数接收到的是参数值的副本,对参数的修改不会影响原始变量。 - **传址调用**:如果需要在函数内部修改变量,可以传递参数的地址,通过指针实现。例如,`void ...

    [C语言程序设计(第四版)].谭浩强.高清_C语言程序设计第四版_

    书中的函数章节会介绍如何定义、调用函数,参数传递方式(传值与传址),以及函数指针的使用,这有助于理解程序的模块化设计。 三、数组与指针 C语言的数组和指针是其特色之一,它们密切相关。数组是一组相同类型的...

    c语言参考手册.pdf_c语言手册_

    函数式编程在C语言中也占有一定地位,手册会讲解如何定义和调用函数,以及函数参数的传值与传址。还有预处理器的使用,如宏定义、条件编译等,这些都是C语言编程中不可或缺的部分。 错误处理和调试技巧也是《C语言...

    《C语言程序设计》课后习题参考答案

    4. 函数:了解函数的定义、调用,参数传递(传值与传址),以及如何使用递归函数。 5. 数组:讲解一维数组、二维数组的声明、初始化,以及数组作为函数参数的处理方式。 6. 指针:深入探讨指针的概念,如何声明、...

    最经典的C语言教程--精通C语言必备

    - 定义与调用:了解如何定义和调用自定义函数,理解参数传递机制,包括传值和传址。 - 函数指针:理解函数指针的概念,以及如何使用它来实现回调函数和动态调度。 - 内联函数与预处理器宏:探讨内联函数以提高...

    C语言精彩编程100例

    学习如何定义和调用函数,理解参数传递机制(传值与传址),以及如何使用递归都是关键知识点。此外,函数的返回值和void类型函数的使用也需要深入理解。 数组是C语言中存储一组相同类型数据的集合。学习如何声明、...

Global site tag (gtag.js) - Google Analytics