在学习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)
分享到:
相关推荐
由于在链表的操作过程中,尾指针会不断变化,所以在一些函数的形参中都设置指向头指针的指针。以及链表的结束判断条件变成q是否等于尾指针。 2、注意传递的实参需要取地址 3、循环链表的优势在于双链表合并,以及...
适用于初第七章:结构与联合 结构类型定义和结构变量说明 在实际问题中,一组数据往往具有不同的数据类型。例如, 在学生登记表中,姓名应为字符型;学号可为整型或字符型; 年龄应为整型;性别应为字符型;...
//--------------使用文件数据来建立Good链表的建立函数,形参为ifstream类的引用----------------------// Good* Create_Good(ifstream& infile); //------------------------通过链表中的数据来建立文件的函数---...
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与...
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章用户自己建立...
8.7.3指针数组作main函数的形参 8.8动态内存分配与指向它的指针变量 8.8.1什么是内存的动态分配 8.8.2怎样建立内存的动态分配 8.8.3void指针类型 8.9有关指针的小结 习题 第9章;用户自己建立数据类型 ...
11.4.1 形参为指针变量时,实参和形参之间的数据传递 95 11.4.2 通过传送地址值,在被调用函数中直接改变调用函数中变量的值 96 11.4.3 函数返回地址值 97 11.5 动态存储分配 98 11.6 链表的建立及基本操作 100...
3. 形参和实参 4. 全局变量、局部变量和作用域 4. 分支语句 1. if语句 2. if/else语句 3. 布尔代数 4. switch语句 5. 深入理解函数 1. return语句 2. 增量式开发 3. 递归 6. 循环语句 1. while语句 2. do/while语句 ...
8.7.3 指针数组作main函数的形参 8.8 动态内存分配与指向它的指针变量 8.8.1 什么是内存的动态分配 8.8.2 怎样建立内存的动态分配 8.8.3 void指针类型 8.9 有关指针的小结 习题 第9章 用户自己建立数据类型 9.1 定义...
而其他类型如int作为参数时,由于函数参数值实质上是实参的一份拷贝,被调函数内部对形参的改变并不影响实参的值。 22、数据结构和算法: A:查找: (1)二分法查找; B:写出下列算法的时间复杂度和实现排序: (1)...
6. 若需要利用形参直接访问实参时,应将形参变量说明为( )参数。 A.值 B.函数 C.指针 D.引用 7. 在稀疏矩阵的带行指针向量的链接存储中,每个单链表中的结点都具有相同的( )。 A.行号 B.列号 C.元素值 D...
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()的...
2. 小结函数中形参和实参的结合规则。 实验七 函数(2) [目的与要求] 1、 掌握C语言函数定义及调用的规则。 2、 理解参数传递的过程。 [ 实验内容与步骤] 1、 上机调试下面的程序,记录系统给出的出错信息,并...
为了避免这样的警告,C++允许声明一个无名形参,以告诉编译器存在该参数,且调用者需要为其传递一个实际参数,但是函数不会用到这个参数。下面给出使用了无名参数的C++函数代码: int fun(int x,int) //注意不同点...
invokeByObject.java 对象实参传递示例程序 invokeByValue.java 传值调用示例程序 invokeMethod.java 同一个类中调用方法示例 invokeOther.java 类的外部调用方法示例 invokeStaticMethod.java 调用静态方法...
第一章 C程序设计筑基..........................................................................................................1 1.1 二进制基础.............................................................
软件编程规范培训实例与练习 软件编程规范培训实例与练习 问题分类 1 逻辑类问题(A类)-指设计、编码中出现的计算正确性和一致性、程序逻辑控制等方面出现的问题,在系统中起关键作用,将导致软件死机、功能...