`
gauss2008
  • 浏览: 41066 次
  • 性别: 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)
分享到:
评论

相关推荐

    数据结构习题及答案.doc

    如果形参需要间接访问实参指针所指向的对象且有存储空间,应选择指针参数(A)。若只需拷贝实参值,与实参无关,应选择值参数(C)。 7-8. 时间复杂度分析:时间复杂度是衡量算法效率的重要指标。第7题的程序时间...

    2014年3月阿里巴巴实习招聘笔试题及部分答案.docx

    4. 函数调用与形参实参:形参是在函数定义时声明的,只在函数内部有效,调用结束后释放。实参是在调用函数时传递的值,可以是常量、变量、表达式等。形参和实参之间的数据传递是单向的,形参的变化不会影响实参。 5...

    C++、Linux、数据结构、算法等面试题集锦含参考答案.docx

    1. 指针参数传递:传递的是地址值,形参是实参副本,对形参的修改不会影响实参。 2. 引用参数传递:形参存储实参的地址,对形参的操作直接影响实参。 3. 区别在于,引用参数的修改是直接作用于实参,而指针参数的...

    计算机二级C语言上机考试之结构体与链表.pdf

    2. 参数传递:可以使用形参和实参来传递函数参数。例如,在函数fun中,使用STREC *a和int *n作为形参,传递结构体数组和整型变量。 3. 返回值:可以使用return语句返回函数的执行结果。例如,在函数fun中,使用...

    数据结构试题库

    本试题库主要涵盖了数据结构的基础知识,包括算法的评价标准、链表操作、线性表的特性、栈和队列的操作、图的类型、散列表的冲突处理、形参和实参的关系、稀疏矩阵的存储以及排序和二叉搜索树的时间复杂度。...

    第8章 c语言指针.pptx

    而在地址传递中,形参和实参共享同一内存,形参的修改会影响实参。 3. 形参和实参的值传递问题: - 值传递:函数调用时,实参的值被复制到形参中,两者在内存中是独立的。如`swap()`函数中的例子,形参`x`和`y`的...

    C语言实现循环链表

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

    数据结构试题及答案30440.doc

    7. 形参与实参:如果需要形参直接访问实参,应使用引用参数,这样形参就是实参的一个别名,修改形参即修改实参。 8. 稀疏矩阵:在带行指针向量的存储方式中,每个单链表的结点具有相同的行号,因为它们属于同一行。...

    数据结构+考试复习试题

    12. 形参与实参的关联:问题14中,如果形参需要直接访问实参,应声明为引用参数,这样形参就是实参的别名。 13. 时间复杂度分析:问题15和16中,双层循环的执行时间复杂度为O(m*n),而递归函数的时间复杂度为O(n)。...

    2016年3月阿里巴巴实习招聘笔试题及部分答案.docx

    文档中的内容涉及到了计算机科学和编程的多个知识点,主要包括IP地址与子网掩码的运算、数据类型在内存中的表示、C语言中的算术运算、指针与引用、函数调用时的实参与形参关系、数据结构(如树)的理解、算法(如...

    数据结构试题及答案(1).doc

    7. 形参与实参:若需要形参直接访问实参,形参应声明为引用参数,这样它们会直接绑定到实参,而不是复制实参的值。 8. 稀疏矩阵的链接存储:在带行指针的向量链接存储中,每个单链表代表一行,其节点具有相同的行号...

    数据结构试题及答案10套.doc

    7. **形参与实参**:若需要形参直接访问实参,应使用引用参数(D),这样形参是实参的别名,修改形参会直接影响实参。 8. **稀疏矩阵**:在稀疏矩阵的带行指针向量的存储中,每个单链表中的结点都有相同的行号(A)...

    C语言程序设计题库 第九章:指针

    - **形参与实参的关系**:函数调用时,实参的值传递给形参,但形参的修改不会影响实参,除非形参是实参的指针,如`void fun(int *a)`。 在给定的题目中,通过解析可以看出,正确理解和使用指针是解决问题的关键。...

    数据结构试题及答案 (2)1

    7. **形参与实参**:如果需要形参直接访问实参,应该使用指针参数,这样形参可以指向实参的内存地址。 8. **稀疏矩阵**:在稀疏矩阵的链接存储中,每个单链表中的节点都具有相同的行号,因为它们属于同一行的非零...

    数据结构试题及答案

    7. 形参与实参:如果需要形参直接访问实参,应使用指针参数,因为它们可以修改实参的值。 8. 稀疏矩阵存储:在带行指针向量的链接存储中,每个单链表中的节点都有相同的行号,因为它们属于同一行的非零元素。 9. ...

    程序员考试题及答案.docx

    9. **函数调用方式**:引用调用(call by reference)中,形参是实参的别名,修改形参会影响实参的值。值调用(call by value)则创建实参的副本,修改形参不会影响实参。根据题目描述,引用调用时,形参x被修改,...

    数据结构第二部分-预备知识PPT学习教案.pptx

    而地址传递则是通过传递实参的地址给形参,形参和实参指向同一个内存空间,因此函数对形参的修改会影响到实参。在`change2`函数中,`*p`和`*q`的改变直接影响到了`a`和`b`的值。 2. **函数结果返回**: C语言中,...

    <数据库应用技术》模拟考试及答案

    1. **形参与实参**:形参(形式参数)是在函数定义时使用的参数,而实参(实际参数)是在函数调用时传递给函数的值。如果需要形参直接访问实参,应该使用**引用参数**(B选项),因为引用参数是实参的别名,修改引用...

    大学数据结构模拟试卷四

    1. **形参与实参**:在编程中,形参是函数声明中的参数,而实参是在调用函数时传递的值。如果需要形参直接访问实参,应该使用引用(B. 引用)作为形参类型,因为引用本质上是变量的别名,它不会复制数据,而是直接...

    数据结构题目整理

    - **指针参数**:如果需要形参直接访问实参,应使用指针参数,形参是实参地址的副本。 8. **非线性结构**: - 非线性结构包括树型结构和图型结构,题目中的队列、栈和线性表是线性结构,而二叉树是非线性结构。 ...

Global site tag (gtag.js) - Google Analytics