`
gauss2008
  • 浏览: 40257 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

链表,形参,实参

阅读更多

 在学习C语言的时候,关于形参如何改变实参,链表中节点的值何时被改变,何时不被改变,一直没有搞明白,今天终于搞懂,记录下来备份。 

1、形参改变实参

 

#include <stdio.h>
#include 
<malloc.h>
typedef 
struct LNode
...{
    FILE 
*fp;
    
char *fname;
    
struct LNode *next;
}
LNode;
LNode 
*LinkList;
LNode 
*ListInit(LNode *linklist)...{
    
    
if((linklist=(LNode *)malloc(sizeof(LNode)))==NULL)...{
        printf(
"Init Link Error");
        exit(
0);
    }

    linklist
->next=NULL;
    
return linklist;
}

ListInsert(LNode 
*linklist, char *fname,FILE *fp)...{
    LNode 
*lnode;
  LNode 
*p;   
  p
=linklist;
            
if((lnode=(LNode*)malloc(sizeof(LNode)))==NULL)...{
                    printf(
"Insert Error");
                    exit(
0);
                }

                
while(p->next!=NULL)...{
                    p
=p->next;                    
                    
if(!strcmp(p->fname,fname))
                        
...{
                            p
->fp=fp;
                            
return ;
                        }

                }

                p
->next=lnode;
                lnode
->fp=fp;
                lnode
->fname=fname;            
                lnode
->next=NULL;
                p
=lnode;
                
                
//注意这一段代码,这里只是改变了test指针指向的所指变量的值,即fname的值,
                
//故,在main函数中的fname的值会发生变化
                while(*fname!='

2、形参不改变实参

 

#include <stdio.h>
#include 
<malloc.h>
typedef 
struct LNode
...{
    FILE 
*fp;
    
char *fname;
    
struct LNode *next;
}
LNode;
LNode 
*LinkList;
LNode 
*ListInit(LNode *linklist)...{
    
    
if((linklist=(LNode *)malloc(sizeof(LNode)))==NULL)...{
        printf(
"Init Link Error");
        exit(
0);
    }

    linklist
->next=NULL;
    
return linklist;
}

ListInsert(LNode 
*linklist, char *fname,FILE *fp)...{
    LNode 
*lnode;
  LNode 
*p;   
  p
=linklist;
            
if((lnode=(LNode*)malloc(sizeof(LNode)))==NULL)...{
                    printf(
"Insert Error");
                    exit(
0);
                }

                
while(p->next!=NULL)...{
                    p
=p->next;                    
                    
if(!strcmp(p->fname,fname))
                        
...{
                            p
->fp=fp;
                            
return ;
                        }

                }

                p
->next=lnode;
                lnode
->fp=fp;
                lnode
->fname=fname;            
                lnode
->next=NULL;
                p
=lnode;                
                
//注意这一段代码,与前一个TestOne.c不一样,
                
//这里将fname的值变为"TTT"的地址,就是所fname的地址改变了,
                
//但是调用函数不能改变实参指针变量的值,也就是地址,故main函数中的fname的值不会变
            /**//*    while(*fname!='

3、通过改变main函数中的字符串数组的值,来改变链表中对应的值

 

#include <stdio.h>
#include 
<malloc.h>
typedef 
struct LNode
...{
    FILE 
*fp;
    
char *fname;
    
struct LNode *next;
}
LNode;
LNode 
*LinkList;
LNode 
*ListInit(LNode *linklist)...{
    
    
if((linklist=(LNode *)malloc(sizeof(LNode)))==NULL)...{
        printf(
"Init Link Error");
        exit(
0);
    }

    linklist
->next=NULL;
    
return linklist;
}

ListInsert(LNode 
*linklist, char *fname,FILE *fp)...{
    LNode 
*lnode;
  LNode 
*p;   
  p
=linklist;
            
if((lnode=(LNode*)malloc(sizeof(LNode)))==NULL)...{
                    printf(
"Insert Error");
                    exit(
0);
                }

                
while(p->next!=NULL)...{
                    p
=p->next;                    
                    
if(!strcmp(p->fname,fname))
                        
...{
                            p
->fp=fp;
                            
return ;
                        }

                }

                p
->next=lnode;
                lnode
->fp=fp;        
                lnode
->fname=fname;
                printf(
"...........after lnode->fname=%s ",lnode->fname);
                lnode
->next=NULL;
                p
=lnode;        
    LinkList 
= linklist;
}

FILE 
*openFile(char *fname)
分享到:
评论

相关推荐

    C语言实现循环链表

    由于在链表的操作过程中,尾指针会不断变化,所以在一些函数的形参中都设置指向头指针的指针。以及链表的结束判断条件变成q是否等于尾指针。 2、注意传递的实参需要取地址 3、循环链表的优势在于双链表合并,以及...

    C语言程序设计标准教程

    适用于初第七章:结构与联合 结构类型定义和结构变量说明  在实际问题中,一组数据往往具有不同的数据类型。例如, 在学生登记表中,姓名应为字符型;学号可为整型或字符型; 年龄应为整型;性别应为字符型;...

    小型售货机

    //--------------使用文件数据来建立Good链表的建立函数,形参为ifstream类的引用----------------------// Good* Create_Good(ifstream& infile); //------------------------通过链表中的数据来建立文件的函数---...

    C语言讲义.doc

    9.2 函数的形参与实参 45 9.3 函数的返回类型与返回值 46 9.4 MAIN函数与EXIT函数与函数的RETURN语句 46 9.5 多个源代码文件程序的编译 47 9.5.1 头文件的使用 47 9.5.2 #include与#define的意义 47 9.5.3 #ifndef与...

    C程序设计(第四版)学习辅导【谭浩强】

    8.7.3指针数组作main函数的形参284 8.8动态内存分配与指向它的指针变量287 8.8.1什么是内存的动态分配287 8.8.2怎样建立内存的动态分配287 8.8.3void指针类型 289 8.9有关指针的小结290 习题293 第9章用户自己建立...

    C语言程序设计(谭浩强)第三版

     8.7.3指针数组作main函数的形参  8.8动态内存分配与指向它的指针变量  8.8.1什么是内存的动态分配  8.8.2怎样建立内存的动态分配  8.8.3void指针类型  8.9有关指针的小结  习题 第9章;用户自己建立数据类型 ...

    新概念C语言.李一波(带详细书签).pdf

    11.4.1 形参为指针变量时,实参和形参之间的数据传递 95 11.4.2 通过传送地址值,在被调用函数中直接改变调用函数中变量的值 96 11.4.3 函数返回地址值 97 11.5 动态存储分配 98 11.6 链表的建立及基本操作 100...

    宋劲彬的嵌入式C语言一站式编程

    3. 形参和实参 4. 全局变量、局部变量和作用域 4. 分支语句 1. if语句 2. if/else语句 3. 布尔代数 4. switch语句 5. 深入理解函数 1. return语句 2. 增量式开发 3. 递归 6. 循环语句 1. while语句 2. do/while语句 ...

    C程序设计 第四版 谭浩强 高清扫描版 带完整书签目录 加 学习辅导

    8.7.3 指针数组作main函数的形参 8.8 动态内存分配与指向它的指针变量 8.8.1 什么是内存的动态分配 8.8.2 怎样建立内存的动态分配 8.8.3 void指针类型 8.9 有关指针的小结 习题 第9章 用户自己建立数据类型 9.1 定义...

    c/c++ 学习总结 初学者必备

    而其他类型如int作为参数时,由于函数参数值实质上是实参的一份拷贝,被调函数内部对形参的改变并不影响实参的值。 22、数据结构和算法: A:查找: (1)二分法查找; B:写出下列算法的时间复杂度和实现排序: (1)...

    数据结构题

    6. 若需要利用形参直接访问实参时,应将形参变量说明为( )参数。 A.值 B.函数 C.指针 D.引用 7. 在稀疏矩阵的带行指针向量的链接存储中,每个单链表中的结点都具有相同的( )。 A.行号 B.列号 C.元素值 D...

    C#5.0本质论第四版(因文件较大传的是百度网盘地址)

    4.1.5 形参和实参 107 4.1.6 方法返回值 107 4.1.7 语句与方法调用的比较 108 4.2 方法的声明 108 4.2.1 形式参数声明 109 4.2.2 方法返回类型声明 110 4.3 using指令 111 4.4 Main()的...

    C 程序指导书及实践指导

    2. 小结函数中形参和实参的结合规则。 实验七 函数(2) [目的与要求] 1、 掌握C语言函数定义及调用的规则。 2、 理解参数传递的过程。 [ 实验内容与步骤] 1、 上机调试下面的程序,记录系统给出的出错信息,并...

    新手学习C++入门资料

    为了避免这样的警告,C++允许声明一个无名形参,以告诉编译器存在该参数,且调用者需要为其传递一个实际参数,但是函数不会用到这个参数。下面给出使用了无名参数的C++函数代码: int fun(int x,int) //注意不同点...

    Java开发技术大全(500个源代码).

    invokeByObject.java 对象实参传递示例程序 invokeByValue.java 传值调用示例程序 invokeMethod.java 同一个类中调用方法示例 invokeOther.java 类的外部调用方法示例 invokeStaticMethod.java 调用静态方法...

    C语言教程,大学教材,Turbo C2.0 基础学习

    第一章 C程序设计筑基..........................................................................................................1 1.1 二进制基础.............................................................

    华为编程开发规范与案例

    软件编程规范培训实例与练习 软件编程规范培训实例与练习  问题分类 1 逻辑类问题(A类)-指设计、编码中出现的计算正确性和一致性、程序逻辑控制等方面出现的问题,在系统中起关键作用,将导致软件死机、功能...

Global site tag (gtag.js) - Google Analytics