指针、结构和类型

合集下载

结构体的三种定义方式

结构体的三种定义方式

结构体的三种定义方式结构体是C语言中的一种用户自定义数据类型,它可以将不同的数据类型组合在一起形成一个新的数据类型。

结构体的定义方式有三种:1. 直接定义直接定义是最简单的一种结构体定义方式,通过在代码中直接定义一个结构体变量来实现。

例如:```struct student {char name[20];int age;float score;};struct student s = {'Tom', 18, 90.5};```2. typedef 定义typedef 是 C 语言中用来给一个数据类型取别名的关键字,也可以用来定义结构体类型。

例如:```typedef struct {char name[20];int age;float score;} student;student s = {'Tom', 18, 90.5};```3. 结构体指针定义结构体指针定义方式,即定义一个指向结构体类型的指针变量,然后通过该指针变量来操作结构体。

例如:```struct student {char name[20];int age;float score;};struct student *p;p = (struct student*)malloc(sizeof(struct student)); p->age = 18;strcpy(p->name, 'Tom');p->score = 90.5;```以上是结构体的三种定义方式,每种方式都有其适用的场景,开发者可以根据实际需要选择不同的方式来定义结构体。

C51学习资料 C51学习手册介绍运算符算法数组指针结构体共用体枚举

C51学习资料 C51学习手册介绍运算符算法数组指针结构体共用体枚举

C51学习资料 C51学习手册介绍运算符算法数组指针结构体共用体枚举一:数据类型·运算符·表达式常量:#define CONST 10变量:bit b_start //位变量Char c_start//字符变量其他略。

1.3C51存储器·寄存器定义定义:分为片内数据存储器·片外数据存储器·片内程序存储器·片外程序存储器。

128byte1.32 寄存器Sfr SBUF=0x99; //定义串行数据寄存器Sfr16 T2=0xcc;//定义T2计时器数据存储器Sbit D0=P2^1;定义位变量Sbit CY=0xd7;使用绝对地址定义使用sbit定义变量空间Bdata unsigned char uc_shield_byte;Sbit b_x= uc_shield_byte^1; //定义首位Sbit b_y= uc_shield_byte^2;Sbit b_z=uc_shield_byte^3;1.4逻辑运算与:&& 或:|| 非:!位逻辑运算位与:&位或:|位异或:^位取反: ~1.5移位运算左移位:<<,个位左移,补0;右移位:>>,高位右移,补0;二:C51控制流(1)顺序结构(2)选择结构1.If……else语句2.If语句3.Switch语句Switch(判断条件){Case 常量表达式1:{语句块1}break;……Default:{语句n+1}break;}4.If和switch嵌套(3)循环结构1.While语句2.Do while语句Do{代码块;}while(条件);3.For语句三:函数1.无参数函数定义Void 函数名(void)//无参数,无返回值函数定义{}Int 函数名(char a,char b)//带参数,带返回值函数定义{}2.局部变量和全局变量静态局部变量和动态局部变量Static int a;静态(static不可省略)Auto int a;动态(auto可省略)3.内部函数和外部函数(1)内部函数:static unsigned char Fun(int a);内部函数只能被该源文件中的其他函数调用(2)外部函数:extern unsigned char Fun(int a);外部函数可以被其他源文件调用的函数四:数组和指针(1)数组:●一维数组:类型数组名【size】;●二维数组类型数组名【size A】【size B】;●字符数组Char ch1【】={‘j’,’a’,’c’,’k’,’x’,’u’};以字符形式赋值Char ch1[]={“jackxu”};以字符串形式赋值(2)指针1)指针和指针变量类型*变量名Int *ptr1;float *ptr2;char *ptr3;2)指针的引用Int a=10;Int *p=&a;X=a ;直接访问方式X=*p;间接访问方式(3)数组和指针Int a[]={1,2,3,4,5,6,7,8,9,10},*ip;Ip=a; //*ip代表a[0],*(ip+i)代表a[i];二维数组与指针同上;(4)字符串和指针不能用指针变量来修改字符串常量;(5)数组,指针和函数的关系1)数组可作为函数的参数:int sum(int a[],int num);2)指针作为函数参数:int sum(int *ip,int num);3)返回指针的函数:char *ip(char *ip,char c);(6)指针数组和指向指针的指针1)类型 *数组名【size】;Char *name【3】={“I”,“love”,“you”};定义了三个字符型指针数组并进行了初始化3)类型 **指针变量名 //指针变量的变量声明*指针变量 //获取指针变量指向的指针**指针变量 //获取指针变量指向的指针内容例子:Main(){Char *name[]={“Tom”,”Jacky”,”Andy”};Char **cp=name;For(int i=0;i<3;i++){Printf(“cp=d%\n”,cp);Printf(“*cp=s%\n”,*cp);Print f(“**cp=c%\n”,**cp);}}程序输出结果为:cp=0x1000;*cp=Tom**cp=TCp=0x1002*cp=Jacky**cp=Jcp=0x1004;*cp=Andy**cp=A五:结构,联合和枚举定义:1)Stuct 结构名{类型说明符成员1类型说明符成员2。

《C语言程序设计》(软件技术11级)(第2章)

《C语言程序设计》(软件技术11级)(第2章)

2.1基本字符、标识符和关键字

2.1.3 关键字(保留字) 为系统预定义的标识符,在C语言中有特殊的 含义
void int return float double char long short unsigned if else switch case default break
do while continue for
2.3数据的格式化输出和输入

输入输出函数库: stdio.h printf() scanf() getchar() putchar() gets() puts()




2.3数据的格式化输出和输入
2.3.1数据的格式化输出
学一学
printf( 格式控制,【输出列表】) ;
格式控制是用双引号括起来的字符串,分两种情况: 1.字符串只含有普通字符或转义字符,则不包含输出 列表。(练一练:\*‟\n‟为转义字符,表示换行*\)
结构类型 联合类型 枚举类型
struct union enum
空类型(无值类型) void
2.2数据类型及常数、变量




1.不同类型的数据在内存中占据不同长度的存 储区(字节),且采用不同的表示方式。 2.一种数据类型对应着一个取值的范围 3.一种数据类型对应着一组允许的操作 4.构造类型数据是由基本类型按照一定的规律 构造出来的。 5.C语言的数据又可分为常量和变量,他们都 分别属于上述类型中得一种。
iSum=iPrize1+iPrize2;
printf("该同学的奖学金为:%d\n",iSum);
return 0;
}
2.3数据的格式化输出和输入

第7章 结构体和联合体数据类型

第7章  结构体和联合体数据类型

结构体数组

结构体数组元素的使用




通过操作数组的每一个元素达到操作数组的目的。结构体 数组元素需要用下标变量的形式表示。 结构体数组元素就相当于一个结构体变量,将引用数组元 素的方法和引用结构体变量的方法结合起来就形成了引用 结构体数组元素成员分量的方法,其一般形式为: 数组名[下标].成员名 不能将结构体数组元素作为一个整体直接进行输入输出, 也需要通过输入输出数组元素的每一个成员分量达到输入 输出结构体数组元素的目的。 可以将结构体数组元素作为一个整体赋给同类型数组的另 外一个元素,或赋给一个同类型的结构体变量。
Ex0707 结构体数组操作(数组元素引用、数组元素的输入输出)示例。
结构体数组

结构体数组作函数的参数



在函数调用期间实参结构体数组将它的全部存储区域或者 部分存储区域提供给形参结构体数组共享。 如果需要把整个实参结构体数组传递给被调函数中的形参 结构体数组,可以使用实参结构体数组的名字或者实参结 构体数组第一个元素(0号元素)的地址。 如果需要把实参结构体数组中从某个元素值后的部分传递 给被调函数中的形参结构体数组,则使用实参结构体数组 某个元素的地址。
Ex0704 结构体变量的输入/输出示例。
结构体类型的定义和使用

结构体变量的使用——做函数参数



结构体类型变量和结构体类型变量的成员都可以作为函数 的参数在函数间进行传递,数据的传递仍然是“值传递方 式”。 使用结构体类型变量作为函数参数时,被调函数的形参和 主调函数的实参都是结构体类型的变量,而且属于同一个 结构体类型。 使用结构体类型变量的成员作为函数参数时,其中被调函 数中的形参是普通变量,而主调函数中的实参是结构体类 型变量中的一个成员,并且形参和实参的数据类型应该对 应一致。

结构体变量和结构体类型的定义

结构体变量和结构体类型的定义

结构体变量和结构体类型的定义1.结构体类型定义定义方式1:Typedef struct LNode { int data; // 数据域 struct LNode *next; // 指针域} *LinkList;定义方式2:struct LNode { int data; // 数据域 struct LNode *next; // 指针域};Typedef struct LNode *LinkList;以上两个定义方式是等价的,是将*LinkList 定义为struct LNode 类型,即LinkList 被定义为一个类型名。

这样就可以用LinkList 来定义说明新的变量了,如:LinkList L;即将 L 定义为 struct LNode 类型的指针变量。

2.结构体类型变量定义定义方式1:struct LNode { int data; // 数据域 struct LNode *next; // 指针域}LnodeA;定义方式2:struct LNode { int data; // 数据域 struct LNode *next; // 指针域};struct LNode LnodeA;以上两个定义方式也是等价的,这样就将LnodeA 定义为一个struct LNode 类型的变量,即 LnodeA 为一个 struct LNode 类型的变量名。

结构体内标的定义方式1.结构体,透明表区,DATA ELEMENT,DOMAIN透明表是对一个物理表的逻辑描述,透明表里有许多字段,并且定义某些字段为 PRIMARY KEY,字段里又包含 DATA ELEMENT,用来描述语言属性和技术属性。

DATA ELEMENT 中又包含DOMAIN,它是定义数据类型和字段长度。

结构体一般是用来定义一个结构变量,有临时数据的储存,没有PRIMARY KEY,结构体里包含 COMPONENT 而不是 FIELD2.Internal table 中的属性分为三种LINE TYPE ,KEY,TABLE KIND。

c语言 sizeof 结构体指针

c语言 sizeof 结构体指针

c语言 sizeof 结构体指针
在C语言中,sizeof操作符用于获取数据类型或变量的大小,
而结构体指针是指向结构体变量的指针。

当我们使用sizeof操作符
来获取结构体指针的大小时,实际上是获取指针变量的大小,而不
是指向的结构体的大小。

在C语言中,结构体指针的大小与指针变量的大小相同,通常
是与系统的位数相关的固定大小。

例如,在32位系统中,指针的大
小通常是4个字节,在64位系统中,指针的大小通常是8个字节。

这意味着无论结构体的大小是多少,结构体指针的大小都是固定的。

结构体指针的大小并不取决于结构体本身的大小,而是取决于
系统架构和编译器的实现。

因此,无论结构体的大小如何,结构体
指针的大小都是固定的。

需要注意的是,结构体指针的大小与结构体本身的大小是不同
的概念。

结构体的大小取决于其成员变量的大小和对齐方式,而结
构体指针的大小只取决于系统架构和编译器的实现。

总之,当你使用sizeof操作符来获取结构体指针的大小时,你
实际上获取的是指针变量的大小,而不是指向的结构体的大小。

这一点在内存分配和指针运算时需要特别注意。

返回结构体指针类型的函数

返回结构体指针类型的函数结构体指针类型的函数是指返回一个指向结构体的指针的函数。

结构体是一种自定义的数据类型,可以包含不同类型的数据成员。

通过返回指向结构体的指针,可以方便地访问和修改结构体中的数据。

以下是一个返回结构体指针类型的函数的示例:```c#include <stdio.h>typedef structint id;char name[50];int age;} Person;Person* createPerson(int id, char name[], int age)Person* p = malloc(sizeof(Person)); // 分配内存空间p->id = id;strncpy(p->name, name, sizeof(p->name)); // 复制字符串p->age = age;return p;int maiPerson* p1 = createPerson(1, "John", 25);printf("Person ID: %d\n", p1->id);printf("Person Name: %s\n", p1->name);printf("Person Age: %d\n", p1->age);free(p1); // 释放内存空间return 0;```在上述示例中,`createPerson` 函数接受 `id`,`name` 和 `age` 作为参数,并返回一个指向 `Person` 结构体的指针。

在函数内部,首先使用 `malloc` 动态分配了一个 `Person` 结构体的内存空间,然后将参数赋值给结构体的成员变量。

在 `main` 函数中,我们调用了 `createPerson` 函数并传入相应的参数。

接着,我们通过 `printf` 函数输出了结构体中的成员变量的值。

c语言程序设计电子书

c语言程序设计电子书C语言程序设计是一门基础且广泛应用的编程语言课程,它以其高效、灵活和强大的功能而著称。

C语言由丹尼斯·里奇(Dennis Ritchie)在20世纪70年代初期于贝尔实验室开发,至今仍是许多系统软件和应用软件的首选语言。

本电子书将从C语言的基本概念、语法结构、数据类型、控制结构、函数、数组、指针、结构体、文件操作等方面进行详细介绍。

第一章:C语言概述C语言是一种过程式编程语言,它支持结构化编程。

C语言的设计哲学是提供一种通用、高效、易于使用的语言,同时保持对硬件的控制。

C 语言广泛应用于操作系统、嵌入式系统、高性能计算等领域。

第二章:C语言环境和基本语法在开始编写C程序之前,需要配置C语言开发环境,如GCC编译器。

C 程序的基本结构包括预处理指令、函数、变量声明和语句。

程序从`main`函数开始执行。

第三章:数据类型和变量C语言提供了多种数据类型,包括整型、浮点型、字符型等。

变量是程序中存储数据的容器,需要先声明后使用。

C语言是静态类型语言,每种变量在使用前必须指定数据类型。

第四章:运算符和表达式C语言提供了丰富的运算符,包括算术运算符、关系运算符、逻辑运算符、位运算符等。

表达式是由变量、常量和运算符组成的组合,用于执行计算。

第五章:控制结构控制结构是程序流程控制的基本构件。

C语言提供了三种基本的控制结构:顺序结构、选择结构(if语句、switch语句)和循环结构(for 循环、while循环、do-while循环)。

第六章:函数函数是C语言中实现代码复用的重要手段。

函数允许将代码组织成独立的块,每个块可以执行特定的任务。

C语言支持函数的定义、声明、调用和递归。

第七章:数组数组是相同数据类型元素的集合。

C语言支持一维数组和多维数组。

数组在内存中是连续存储的,这使得数组操作高效但也需要小心越界问题。

第八章:指针指针是C语言的核心特性之一。

指针变量存储的是另一个变量的内存地址。

c语言四种基本数据类型

c语言四种基本数据类型C语言是一种通用的编程语言,它最初由贝尔实验室设计,并以其发明者之一的库尔德琼斯的名字命名。

C语言已经成为最流行的编程语言之一,它被广泛应用于编译系统、操作系统、网络、嵌入式系统和应用程序等技术领域。

C语言有四种基本数据类型,它们是整型(int)、浮点型(float)、字符型(char)和布尔型(bool)。

整型是最常见的数据类型,它可以表示正数、负数和零,并且可以存储在有限的存储空间中。

它可以用于表示计数和长度。

它也可以用于表示时间,比如以秒(s)、分(m)和小时(h)为单位的时间。

浮点型可以用来表示实数,比如分数、小数和数学中的根号,它的精度比整型高。

它主要用于表示表面积、面积、体积、重量和位置等实际应用中的浮点数。

字符型可以表示任何字符,但其精度比整型和浮点型要低,因为它只有一个字节(8位)的空间。

它主要用来表示字符串、文件名、ID和密码等。

布尔型用来表示真和假,它也只有一个字节的空间,但它可以帮助提高程序的运行效率,因为它可以把一个复杂的表达式简化为一个真假的表达式,这样可以减少编程的时间和空间。

除了四种基本数据类型之外,C语言中还定义了一些复合数据类型,如数组、结构体、共用体和指针等。

数组是一种用来存储多个相同类型数据的类型,它只能存储同一种数据类型,可以用来存储图片、文件等。

结构体是一种可以更精确地表示复杂对象的数据类型,它由多个不同类型的数据组成,可以用来存储学生的学习成绩、考试成绩等。

共用体是一种只有一个变量名的数据类型,但它的空间可以用来存储多种不同的数据类型,可以用来存储多种不同的数据类型,如整型、浮点型和字符型等。

最后,C语言中最重要的数据类型是指针。

指针是一种存储系统中特定内存地址的数据类型,它可以指向系统中任何地址,并可以用来读取和写入数据。

C语言的四种基本数据类型是int、float、char和bool,它们分别用于表示整数、实数、字符和布尔变量。

结构体中定义函数指针

结构体中定义函数指针结构体指针变量的定义定义结构体变量的⼀般形式如下:形式1:先定义结构体类型,再定义变量struct 结构体标识符{ 成员变量列表;…};struct 结构体标识符 *指针变量名;变量初始化:struct 结构体标识符变量名={初始化值1,初始化值2,…,初始化值n };形式2:在定义类型的同时定义变量struct 结构体标识符{ 成员变量列表;…} *指针变量名;形式3:直接定义变量,⽤⽆名结构体直接定义变量只能⼀次struct{ 成员变量列表;…}*指针变量名;其中“指针变量名”为结构体指针变量的名称。

形式1是先定义结构体,然后再定义此类型的结构体指针变量;形式2和形式3是在定义结构体的同时定义此类型的结构体指针变量。

函数指针的定义⼀般的函数指针可以这么定义: int (*func)(int,int);表⽰⼀个指向含有两个int参数并且返回值是int形式的任何⼀个函数指针. 假如存在这样的⼀个函数:int add2(int x,int y){ return x+y;}那么在实际使⽤指针func时可以这样实现:func=&add2; //指针赋值,或者func=add2; add2与&add2意义相同printf("func(3,4)=%d\n",func(3,4));事实上,为了代码的移植考虑,⼀般使⽤typedef定义函数指针类型.typedef int (*FUN)(int,int); //参考下⾯/* typedef int (*funcptr)(); 这个的意思是:定义⼀个返回值为int,不带参数的函数指针,就是说funcptr 是 int (*)()型的指针funcptr table[10];定义⼀个数组,这个数组是funcptr类型的。

就是说这个数组内的内容是⼀个指针,这个指针指向⼀个返回值为int,不带参数的函数 */ FUN func=&add2;func();结构体中包含函数指针其实在结构体中,也可以像⼀般变量⼀样,包含函数指针变量.下⾯是⼀种简单的实现.#include <stdio.h>struct DEMO{int x,y;int (*func)(int,int); //函数指针};int add1(int x,int y){return x*y;}int add2(int x,int y){return x+y;}void main(){struct DEMO demo;demo.func=add2; //结构体函数指针赋值//demo.func=&add2; //结构体函数指针赋值printf("func(3,4)=%d\n",demo.func(3,4));demo.func=add1;printf("func(3,4)=%d\n",demo.func(3,4));}执⾏后终端显⽰:func(3,4)=7func(3,4)=12结构体中指向函数的指针C语⾔中的struct是最接近类的概念,但是在C语⾔的struct中只有成员,不能有函数,但是可以有指向函数的指针,这也就⽅便了我们使⽤函数了。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C语言程序设计进阶尹宝林第三讲:指针、结构和类型2005-1-12C语言程序设计进阶2

指针C语言中功能最强的机制直接按地址访问存储空间C语言中最复杂的机制

表达和使用类型转换

C语言中最容易出错的机制

常引起难以查找和排除的不确定性故障2005-1-12C语言程序设计进阶3

指针和地址指针特定类型存储单元的地址例:int*ip;short*si;

指针类型的作用

确定指针单位增量的长度不同类型指针的相互赋值

通过强制类型转换例:sip=(short*)ip;2005-1-12C语言程序设计进阶4

指针和地址(续)指针值的增减以所指向的类型的长度为单位指向同类型的存储单元

例:设sizeof(int)==4int*p,a[MAX_LEN];p=a;//p指向a[0]p++;//p指向a[1](p的值增加4)p+=5;//p指向a[6](p的值增加20)p-=1;//p指向a[5](p的值减少4)main(){int n, *np;

np = &n;printf("NP: %x, char: %x, short: %x, int: %x, void: %x\n",np, (char *) np + 1,(short *) np + 1,np + 1,(void *) np + 1);}

NP: 80000010char: 80000011short: 80000012int: 80000014void: 800000112005-1-12C语言程序设计进阶6

指针运算合法的指针运算相同类型指针的赋值指针值的整数增减

指向同一数组中元素的指针相减

指针比较

指向同一数组中元素的指针的比较指针与0的比较

经过合法强制类型转换的指针赋值2005-1-12C语言程序设计进阶7

指针运算(续)不合法的指针运算指针间的加、乘、除指针加减浮点数

指针移位操作

指针的位运算

不同类型指针间的直接赋值2005-1-12C语言程序设计进阶8

指针运算(续)指针与整数一般不能互换0是例外

例:#define NULL02005-1-12C语言程序设计进阶9

指针运算(续)增量运算和间接引用*与++(--)具有相同的优先级*与++(--)在求值时按从右到左的顺序结合++*ip == ++(*ip)*ip++ !=(*ip)++

表达式的值相同,但在求值完毕后,*ip++: 增加ip,使其指向下一个存储单元(*ip)++: 增加其所指向的存储单元中的值2005-1-12C语言程序设计进阶10

指针运算的例int p = 3, *pp = &p, q = 3, *pq = &q, m, n;printf("pp: %p, p: %d, pq: %p, q: %d\n", pp, p, pq, q);m = (*pp)++;n = *(pq++);

printf("pp: %p, p: %d, m: %d, pq: %p, q: %d, n: %d\n", pp, p, m, pq, q, n);

输出结果:pp: 0012ff28, p: 3, pq: 0012ff20, q: 3pp: 0012ff28, p: 4, m: 3, pq: 0012ff24, q: 3, n: 32005-1-12C语言程序设计进阶11

指针运算的例(续)int *low, *mid, *high,a[MAX], n;... ...

low = a;high = &a[8];n = high –low;n = ?8

// low指向数组低端的元素,high指向数组高端的元素// 计算位于low和high中间的元素的位置mid = (low + high) / 2;mid = low + (high –low) / 2;2005-1-12C语言程序设计进阶12

指针和数组相同类型的数组与指针数组的值是该数组第0个元素的地址指针的值是相同类型数据的地址

数组的值可以对指针赋值

数组和指针在一定条件下可以互换表示方式

例a[i]*(a+i)2005-1-12C语言程序设计进阶13

数组下标与指针数组下标的任何运算都可以用指针实现数组元素连续排列相邻元素的地址之差等于元素类型的长度

指针的增量以所指向的类型的长度为单位

可以把数组看成是指向相同类型的指针

指针和数组的引用可以互换2005-1-12C语言程序设计进阶14

数组和指针的区别数组名不是变量,指针是变量数组在定义时分配有固定的存储空间指针可以指向符合类型要求的任何空间

在定义和作为外部变量声明时,数组与指针不能互换

例:externinta[];charb[BUFSIZ];

数组和指针表示方式的互换条件

1.在表达式中2.在用作函数的参数时2005-1-12C语言程序设计进阶15

指针与数组互换的例int i, a[N], *p = a;„ „for (i = 0; i < N; i++)a[i] = i * i;

其中a[i] = i * i可以改写成

1.p[i] = i * i;

2.*(a+i) = i * i;2005-1-12C语言程序设计进阶16

作为变元和参数的数组在函数参数声明中,数组和指针等价一般常用指针对于指针或数组类型的变元,可以向其传递数组或指针类型的变量

数组名用作变元时,所传递的是其第0个元素的地址,即指向第0个元素的指针

可以利用指针将数组的一部分传给函数2005-1-12C语言程序设计进阶17

数组类型变元的例string标准函数#include char *strcat( char *dest, const char *src); int strcmp(const char *str1, const char *str2);void strcpy(char *s, char *t);„ „

在实际使用时,任何一个参数都可以是数组:

char *str = “This is a string.”, buf[BUFSIZ];strcpy(buf, str);f(int arr[]) {... ...} f(int *arr) {... ...}f(&a[2]);f(a + 2);

问题:为什么?

数组的负数下标语法合法语义是否合法取决于是否越界

例:p[-2]2005-1-12C语言程序设计进阶19

指针交换vs数组交换指针交换替代数组交换的目的提高速度:用索引的交换替代内容的交换简化程序:避免内容的复制

指针交换替代数组交换的例

字符串数组的排序(K & R 第5.6节的例)行编辑器

记录最长的输入行使用数组复制int len,max_n = 0;char in_line[MAX], longest[MAX];

while (fgets(in_line, MAX, stdin) != NULL ){len = strlen(in_line);if( len > max_n ) {max_n = len;strcpy(longest, in_line);}}使用指针交换int len,max_n = 0;char line_1[MAX], line_2[MAX], *in_line, *longest, *tmp;

in_line = line_1, longest = line_2;while (fgets(in_line, MAX, stdin) != NULL ){len = strlen(in_line);if( len > max_n ) {max_n = len;tmp = longest, longest = in_line, in_line = tmp;}}

相关文档
最新文档