C语言小结-输入型参数和输出型参数



1、函数为什么需要传参和返回值

(1) 函数的作用就是处理数据,传入的参数就是被加工的数据,返回值就是输出的结果。
(2)函数名就是这个函数的入口,在内存中表示就是一个函数代码段的首地址,实质是一个指针常量,所以在程序中使用函数名都是当地址来用的,用来调用这个函数。再理解指针函数的实质就比较简单了。
(3) 如果一个函数没有传参和返回值,也是可以的,也可以正常运行,那么没有返回值和形参的函数怎么运行呢?为什么会有这种函数呢?其实这种类型的函数在C语言中有很多。主要有两个作用:1) 在系统初始化的时候,我们做一些系统的配置工作,这种类型的函数都是一些配置函数,不需要形参。2)我们处理一些全局变量的数据时,会用到这种类型的函数。

2、输入型参数和输出型参数

我们举个例子来说明一下什么是输入型参数,什么是输出型参数。


int func(int a , int *p)
{
    *p = a +10;

    return 0;
}

int main()
{

    int x , y ;
    x = 10;

    func(x,&y);
    printf("x = %d \n", x);
    printf("y = %d \n", y);

    return 0;
}

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

运行结果:

root@ubuntu:/mnt/hgfs/share/code/c_advance/pointer# ./a.out 
x = 10 
y = 20 

 
 
  • 1
  • 2
  • 3
  • 4

结论:
(1) func函数中a是输入型参数,p是输出型参数。
(2) 形参的传值调用是输入型参数。传址调用即有可能是输出型参数,也有可能是输入型参数。作为输入型参数使用时,一般会加入const关键字,表明是只读,不能修改。

2018.3.7更新

今天又发现了一个有趣的现象。事情是这样的:我需要申请一块内存空间,然后使用strcpy来拷贝一个字符串,最后printf打印,直接上代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void GetMemory(char *p)
{
    printf("GetMemory\n");
    p = (char *)malloc(100);
    printf("GetMemory: %p\n", p);

}

int main(void) 
{
    char *str = NULL;
    printf("&str = %p\n",&str); //0xbfc6f498
    printf("str = %p\n\n",str); //(nil)

    //GetMemory(str);
    GetMemory2(&str);
    strcpy(str, "hello world \n");
    printf("str = %p\n",str);
    printf("&str = %p\n",&str);
    printf("%s",str);
    //free(str);

    return 0;

}

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

运行结果如下:

void@ubuntu:/mnt/hgfs/VMshare/code/c$ ./a.out 
&str = 0xbfce7718
str = (nil)

GetMemory
GetMemory: 0x81ab410
Segmentation fault (core dumped)

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

结果分析:报了段错误,为什么呢? char *str;是一个局部变量,我们传入局部变量然后还想要修改该局部变量的值,这是不科学的,也是不合理的。这种虽然也是传址调用,但是本质上还是传值调用。说的有点绕,需要仔细体会下。 这种传递和上边的传入变量x的效果是一样的。

那么怎么改呢?

两个思路:
1、将char *str = NULL;定义为全局变量,这样我们是把地址空间传递给了一个全局变量,这样函数返回的时候地址空间还在。已验证,就不贴代码和运行结果了。

2、我们使用二维指针来试一下,直接上代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void GetMemory2(char **p)
{

    *p = (char *)malloc(100);
    printf("p = %p \n", p);
    printf("*p = %p \n", *p);

}

int main(void) 
{
    char *str = NULL;
    printf("main:");
    printf("&str = %p\n",&str); //0xbfc6f498
    printf("str = %p\n\n",str); //(nil)
    printf("\n");

    //GetMemory(str);
    GetMemory2(&str);
    strcpy(str, "hello world \n");
    printf("str = %p\n",str);
    printf("&str = %p\n",&str);
    printf("%s",str);
    //free(str);

    return 0;

}

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

运行结果如下:

void@ubuntu:/mnt/hgfs/VMshare/code/c$ ./a.out 
main:
&str = 0xbff03f88
str = (nil)


GetMemory2
&p = 0xbff03f70 
p = 0xbff03f88 
*p = 0x8c6d410 

str = 0x8c6d410
&str = 0xbff03f88
hello world 

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

满足了我们的要求。

3、总结

函数在传参的时候,其实在栈空间又复制了一份,比如我们定义函数:int fun(int x),当我们在调用fun(10);的时候,其实编译器内部操作可以看为两步:int x ; x = 10;,且在调用完成后释放该函数申请的变量。我们再看一下这个函数:void GetMemory(char *p),在被调用的时候,函数内部申请了一个char *p的变量,所以我们把这个变量的值是传递不到调用的函数内部的。

我们定义:void GetMemory2(char **p),虽然它内部也定义了一个变量char **p = &str,我们看到被分配了地址空间:0xbff03f70。但是*p指向了malloc申请出来的内存空间。所以我们的str也指向了malloc申请的内存空间。当函数调用结束,**p被释放,但是str指向的内存空间的地址确没有改变,所以就可以正常调用了。换句话说,我申请了一个二重指针指向你,然后修改了你的指向(本来指向null,后来指向malloc申请出来的空间),然后我申请的二重指针被释放掉,但是你的指向还在。

引申:其实传址调用和C++语言的引用&很相似,但又有一点不同(传参调用本身也申请了变量),但是本质都是一样的,我用多个指针变量指向同一块内存,这个指针修改完被释放,但是还有其他指针指向该内存,以此来达到间接修改的目的。在Python中,我们也可以使用多个变量来指向同一个对象,当没有变量指向这个对象的时候,对象空间就会被自动回收。

最后,C语言是一门博大精深的语言,需要我们认真体会。

转自:https://blog.csdn.net/u014421520/article/details/77620774

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图书目录编辑 第一章:程序设计和C语言   1.1什么是计算机程序   1.2什么是计算机语言   1.3C语言的发展及其特点   1.4最简单的C语言程序   1.4.1最简单的C语言程序举例   1.4.2C语言程序的结构   1.5运行C程序的步骤与方法   1.6程序设计的任务   习题 第2章:算法——程序的灵魂 2.1什么是算法 2.2简单的算法举例 2.3算法的特性   2.4怎样表示一个算法   2.4.1;用自然语言表示算法 2.4.2用流程图表示算法 2.4.3三种基本结构和改进的流程图   2.4.4用N-S流程图表示算法   2.4.5用伪代码表示算法   2.4.6用计算机语言表示算法   2.5结构化程序设计方法   习题 第3章:简单的C程序设计——顺序程序设计 3.1顺序程序设计举例   3.2数据的表现形式及其运算   3.2.1常量和变量   3.2.2数据类   3.2.3整数据   3.2.4字符数据   3.2.5浮点数据   3.2.6怎样确定常量的类   3.2.7运算符和表达式   3.3C语句   3.3.1C语句的作用和分类   3.3.2最基本的语句——赋值语句   3.4数据的输入输出   3.4.1输入输出举例   3.4.2有关数据输入输出的概念   3.4.3用printf函数输出数据   3.4.4用scanf函数输入数据   3.4.5字符数据的输入输出   习题 第4章:选择结构程序设计 4.1选择结构和条件判断   4.2用if语句实现选择结构   4.2.1用if语句处理选择结构举例   4.2.2if语句的一般形式   4.3关系运算符和关系表达式   4.3.1关系运算符及其优先次序   4.3.2关系表达式   4.4逻辑运算符和逻辑表达式   4.4.1逻辑运算符及其优先次序   4.4.2逻辑表达式   4.4.3逻辑变量   4.5条件运算符和条件表达式   4.6选择结构的嵌套   4.7用switch语句实现多分支选择结构   4.8选择结构程序综合举例   习题 第5章;循环结构程序设计 5.1为什么需要循环控制 5.2用while语句实现循环   5.3用do…while语句实现循环   5.4用for 语句实现循环   5.5循环的嵌套   5.6几种循环的比较   5.7改变循环执行的状态   5.7.1用break语句提前终止循环   5.7.2用continue语句提前结束本次循环   5.7.3break语句和continue语句的区别   5.8循环程序举例   习题 第6章;利用数组处理批量数据 6.1.怎样定义和引用一维数组   6.1.1怎样定义一维数组   6.1.2怎样引用一维数组元素   6.1.3一维数组的初始化   6.1.4一维数组程序举例   6.2.怎样定义和引用二维数组   6.2.1怎样定义二维数组   6.2.2怎样引用二维数组的元素   6.2.3二维数组的初始化   6.2.4二维数组程序举例   6.3.字符数组 6.3.1怎样定义字符数组   6.3.2字符数组的初始化   6.3.3怎样引用字符数组中的元素   6.3.4字符串和字符串结束标志   6.3.5字符数组的输入输出   6.3.6使用字符串处理函数   6.3.7字符数组应用举例   习题 第7章:用函数实现模块化程序设计 7.1为什么要用函数   7.2怎样定义函数   7.2.1为什么要定义函数   7.2.2定义函数的方法   7.3调用函数174   7.3.1函数调用的形式   7.3.2函数调用时的数据传递   7.3.3函数调用的过程   7.3.4函数的返回值   7.4对被调用函数的声明和函数   7.5函数的嵌套调用   7.6函数的递归调用   7.7数组作为函数参数   7.7.1数组元素作函数实参   7.7.2数组名作函数参数   7.7.3多维数组名作函数参数   7.8局部变量和全局变量   7.8.1局部变量   7.8.2全局变量   7.9变量的存储方式和生存期   7.9.1动态存储方式与静态存储方式   7.9.2局部变量的存储类别   7.9.3全局变量的存储类别   7.9.4存储类别小结   7.10关于变量的声明和定义   7.11内部函数和外部函数   7.11.1内部函数   7.11.2外部函数   习题 第8章;善于利用指针 8.1指针是什么   8.2指针变量 8.2.1使用指针变量的例子   8.2.2怎样定义指针变量   8.2.3怎样引用指针变量   8.2.4指针变量作为函数参数   8.3通过指针引用数组   8.3.1数组元素的指针   8.3.2在引用数组元素时指针的运算   8.3.3通过指针引用数组元素   8.3.4用数组名作函数参数   8.3.5通过指针引用多维数组   8.4通过指针引用字符串   8.4.1字符串的引用方式   8.4.2字符指针作函数参数   8.4.3使用字符指针变量和字符数组的比较   8.5指向函数的指针   8.5.1什么是函数指针   8.5.2用函数指针变量调用函数   8.5.3怎样定义和使用指向函数的指针变量   8.5.4用指向函数的指针作函数参数   8.6返回指针值的函数   8.7指针数组和多重指针   8.7.1什么是指针数组   8.7.2指向指针数据的指针   8.7.3指针数组作main函数形参   8.8动态内存分配与指向它的指针变量   8.8.1什么是内存的动态分配   8.8.2怎样建立内存的动态分配   8.8.3void指针类   8.9有关指针的小结   习题 第9章;用户自己建立数据类 9.1定义和使用结构体变量   9.1.1自己建立结构体类   9.1.2定义结构体类变量   9.1.3结构体变量的初始化和引用   9.2使用结构体数组   9.2.1定义结构体数组   9.2.2结构体数组的应用举例   9.3结构体指针   9.3.1指向结构体变量的指针   9.3.2指向结构体数组的指针   9.3.3用结构体变量和结构体变量的指针作函数参数   9.4用指针处理链表   9.4.1什么是链表   9.4.2建立简单的静态链表   9.4.3建立动态链表   9.4.4输出链表   9.5共用体类   9.5.1什么是共用体类   9.5.2引用共用体变量的方式   9.5.3共用体类数据的特点   9.6使用枚举类   9.7用typedef声明新类名   习题 第10章;对文件的输入输出 10.1C文件的有关基本知识   10.1.1什么是文件   10.1.2文件名   10.1.3文件的分类   10.1.4文件缓冲区   10.1.5文件类指针   10.2打开与关闭文件   10.2.1用fopen函数打开数据文件   10.2.2用fclose函数关闭数据文件   10.3顺序读写数据文件   10.3.1怎样向文件读写字符   10.3.2怎样向文件读写一个字符串   10.3.3用格式化的方式读写文件   10.3.4用二进制方式向文件读写一组数据   10.4随机读写数据文件   10.4.1文件位置标记及其定位   10.4.2随机读写   10.5文件读写的出错检测   习题
“新概念C语言”突破了以往任何一种语言教材的旧的模式,将教学内容分为入门篇和提高篇两个篇章。在入门篇中只引进程序设计必要的语法现象,达到快速入门。激发兴趣的目的。在入门篇和提高篇之间插一个强化上机实验周,巩固学习内容。在提高篇中完成完整的语法、算法、程序设计思想等教学目的的学习任务。由于学生对语言已具有了初步的了解并掌握了最基本的语法和程序设计思想,能设计较简单的程序,所以在提高篇的学习中,不论对灵活语法的学习和掌握,还是对程序设计思想的掌握都更加容易,从而可以较容易达到教学目标。 第一部分 入门篇 1 第1章 C语言的产生及其工作流程 3 1.1 C语言的产生 3 1.2 程序和程序设计 3 1.2.1 C程序 3 1.2.2 程序设计 4 习题 4 第2章 C程序设计的初步知识 5 2.1 简单C程序的构成和格式 5 2.2 常量、变量和标识符 6 2.2.1 标识符 6 2.2.2 常量 7 2.2.3 用定义一个符号名的方法来代表一个常量 7 2.2.4 变量 8 2.3 整数据 8 2.3.1 整常量 8 2.3.2 整变量 8 2.4 实数据 9 2.4.1 实常量 9 2.4.2 实变量 9 2.5 字符数据 10 2.5.1 字符常量 10 2.5.2 字符串常量 11 2.5.3 字符变量 11 2.6 算术表达式 11 2.6.1 基本的算术运算符 11 2.6.2 运算符的优先级、结合性和算术表达式 12 2.6.3 强制类转换表达式 13 2.7 赋值表达式 13 2.7.1 赋值运算符和赋值表达式 13 2.7.2 赋值运算中的类转换 14 习题 15 第3章 顺序结构程序 16 3.1 复合语句和空语句 16 3.1.1 复合语句 16 3.1.2 空语句 16 3.2 程序举例 16 习题 17 第4章 选择结构 19 4.1 关系运算和逻辑运算 19 4.1.1 C语言中的逻辑值 19 4.1.2 关系运算符和关系表达式 19 4.1.3 逻辑运算符和逻辑表达式 20 4.2 if语句和用if语句构成的选择结构 21 习题 22 第5章 循环结构 25 5.1 for语句和用for语句构成的循环结构 25 5.1.1 for语句构成的循环结构 25 5.1.2 for循环的执行过程 25 5.1.3 有关for语句的说明 25 5.2 循环结构的嵌套 27 习题 28 第6章 函数 30 6.1 函数的定义和返回值 30 6.1.1 函数定义的语法 30 6.1.2 函数的返回值 30 6.2 函数的调用 32 6.2.1 函数的调用方式 32 6.2.2 函数调用时的语法要求 32 6.3 函数的说明 33 6.3.1 函数说明的形式 33 6.3.2 函数说明的位置 34 6.4 调用函数和被调用函数之间的数据传递 34 6.5 库函数 36 6.6 数据输入输出及常用库函数 37 6.6.1 printf函数(格式输出函数) 37 6.6.2 scanf函数(格式输入函数) 39 6.6.3 调用putchar和getchar函数输出输入字符 40 6.7 程序举例 41 习题 43 第7章 数组 45 7.1 一维数组的定义和一维数组元素的引用 45 7.1.1 一维数组的定义 45 7.1.2 一维数组元素的引用 46 7.1.3 一维数组的初始化 46 7.1.4 一维数组的定义和数组元素引用举例 47 7.2 函数之间对一维数组和数组元素的引用 47 7.2.1 数组元素做实参 47 7.2.2 数组名做实参 49 7.3 一维数组应用举例 50 7.4 字符数组 53 7.4.1 字符数组的定义 53 7.4.2 字符数组的初始化 54 7.4.3 字符数组的引用 54 7.4.4 字符串与字符串结束标志 55 7.4.5 字符数组的输入输出 56 7.4.6 字符串处理函数 58 7.4.7 字符数组应用举例 60 习题 61 第8章 文件 63 8.1 C语言文件的概念 63 8.2 打开文件 64 8.3 关闭文件 65 8.4 调用getc(fgetc)和putc(fputc)等常用函数进行输入输出 65 8.5 判断文件结束函数feof 68 习题 69 第二部分 提高篇 71 第9章 算法 73 9.1 算法 73 9.2 结构化程序设计和模块化结构 74 9.2.1 结
不多说,很经典的。 谭浩强c语言程序设计(pdf版) 1 C语言概述 1.1 C语言的发展过程 1.2 当代最优秀的程序设计语言 1.3 C语言版本 1.4 C语言的特点 1.5 面向对象的程序设计语言 1.6 C和C++ 1.7 简单的C程序介绍 1.8 输入输出函数 1.9 C源程序的结构特点 1.10 书写程序时应遵循的规则 1.11 C语言的字符集 1.12 C语言词汇 1.13 Turbo C 2.0集成开发环境的使用 1.13.1 Turbo C 2.0简介和启动 1.13.2 Turbo C 2.0集成开发环境 1.13.3 File菜单 1.13.4 Edit菜单 1.13.5 Run菜单 1.13.6 Compile菜单 1 1.13.7 Project菜单 1.13.8 Options菜单 1.13.9 Debug菜单 1.13.10 Break/watch菜单 1.13.11 Turbo C 2.0的配置文件 2 程序的灵魂—算法 2.1 算法的概念 21 2.2 简单算法举例 21 2.3 算法的特性 24 2.4 怎样表示一个算法 24 2.4.1 用自然语言表示算法 24 2.4.2 用流程图表示算法 24 2.4.3 三种基本结构和改进的流程图 28 2.4.4 用N-S流程图表示算法 29 2.4.5 用伪代码表示算法 30 2.4.6 用计算机语言表示算法 31 2.5 结构化程序设计方法 31 3 数据类、运算符与表达式 3.1 C语言的数据类 32 3.2 常量与变量 33 2 3.2.1 常量和符号常量 33 3.2.2 变量 33 3.3 整数据 34 3.3.1 整常量的表示方法 34 3.3.2 整变量 35 3.4 实数据 37 3.4.1 实常量的表示方法 37 3.4.2 实变量 38 3.4.3 实常数的类 39 3.5 字符数据 39 3.5.1 字符常量 39 3.5.2 转义字符 39 3.5.3 字符变量 40 3.5.4 字符数据在内存中的存储形式及使用方法 41 3.5.5 字符串常量 41 3.5.6 符号常量 42 3.6 变量赋初值 42 3.7 各类数值数据之间的混合运算 43 3.8 算术运算符和算术表达式 44 3.8.1 C运算符简介 44 3.8.2 算术运算符和算术表达式 45 3.9 赋值运算符和赋值表达式 47 3 3.10 逗号运算符和逗号表达式 48 3.11 小结 49 3.11.1 C的数据类 49 3.11.2 基本类的分类及特点 49 3.11.3 常量后缀 49 3.11.4 常量类 49 3.11.5 数据类转换 49 3.11.6 运算符优先级和结合性 50 表达式 50 4 最简单的C程序设计—顺序程序设计 4.1 C语句概述 51 4.2 赋值语句 53 4.3 数据输入输出的概念及在C语言中的实现 54 4.4 字符数据的输入输出 54 4.4.1 putchar 函数(字符输出函数) 54 4.4.2 getchar函数(键盘输入函数) 55 4.5 格式输入输出 55 4.5.1 printf函数(格式输出函数) 56 4.5.2 scanf函数(格式输入函数) 58 顺序结构程序设计举例 60 4 5 分支结构程序 5.1 关系运算符和表达式 61 5.1.1 关系运算符及其优先次序 61 5.1.2 关系表达式 61 5.2 逻辑运算符和表达式 62 5.2.1 逻辑运算符极其优先次序 62 5.2.2 逻辑运算的值 63 5.2.3 逻辑表达式 63 5.3 if语句 64 5.3.1 if语句的三种形式 64 5.3.2 if语句的嵌套 67 5.3.3 条件运算符和条件表达式 69 5.4 switch语句 70 5.5 程序举例 71 6 循环控制 6.1 概述 71 6.2 goto语句以及用goto语句构成循环 71 6.3 while语句 72 6.4 do-while语句 74 6.5 for语句 76 6.6 循环的嵌套 79 5 6.7 几种循环的比较 79 6.8 break和continue语句 79 6.8.1 break语句 79 6.8.2 continue 语句 80 6.9 程序举例 81 7 数组 7.1 一维数组的定义和引用 82 7.1.1 一维数组的定义方式 82 7.1.2 一维数组元素的引用 83 7.1.3 一维数组的初始化 84 7.1.4 一维数组程序举例 84 7.2 二维数组的定义和引用 86 7.2.1 二维数组的定义 86 7.2.2 二维数组元素的引用 86 7.2.3 二维数组的初始化 87 7.2.4 二维数组程序举例 89 7.3 字符数组 89 7.3.1 字符数组的定义 89 7.3.2 字符数组的初始化 89 7.3.3 字符数组的引用 90 7.3.4 字符串和字符串结束标志 91 6 7.3.5 字符数组的输入输出 91 7.3.6 字符串处理函数 92 7.4 程序举例 94 本章小结 97 8 函数 8.1 概述 98 8.2 函数定义的一般形式 99 8.3 函数参数函数的值 100 8.3.1 形式参数和实际参数 101 8.3.2 函数的返回值 102 8.4 函数的调用 106 8.4.1 函数调用的一般形式 106 8.4.2 函数调用的方式 106 8.4.3 被调用函数的声明和函数 107 8.5 函数的嵌套调用 108 8.6 函数的递归调用 109 8.7 数组作为函数参数 110 8.8 局部变量和全局变量 112 8.8.1 局部变量 113 8.8.2 全局变量 119 8.9 变量的存储类别 120 7 8.9.1 动态存储方式与静态动态存储方式 120 8.9.2 auto变量 120 8.9.3 用static声明局部变量 121 8.9.4 register变量 122 用extern声明外部变量 123 9 预处理命令 9.1 概述 124 9.2 宏定义 125 9.2.1 无参宏定义 126 9.2.2 带参宏定义 127 9.3 文件包含 128 9.4 条件编译 130 9.5 本章小结 10 指针 10.1 地址指针的基本概念 131 10.2 变量的指针和指向变量的指针变量 132 10.2.1 定义一个指针变量 133 10.2.2 指针变量的引用 133 10.2.3 指针变量作为函数参数 137 10.2.4 指针变量几个问题的进一步说明 140 8 10.3 数组指针和指向数组的指针变量 141 10.3.1 指向数组元素的指针 142 10.3.2 通过指针引用数组元素 143 10.3.3 数组名作函数参数 146 10.3.4 指向多维数组的指针和指针变量 148 10.4 字符串的指针指向字符串的针指变量 150 10.4.1 字符串的表示形式 152 10.4.2 使用字符串指针变量与字符数组的区别 158 10.5 函数指针变量 159 10.6 指针函数 160 10.7 指针数组和指向指针的指针 161 10.7.1 指针数组的概念 161 10.7.2 指向指针的指针 164 10.7.3 main函数参数 166 10.8 有关指针的数据类和指针运算的小结 167 10.8.1 有关指针的数据类小结 167 10.8.2 指针运算的小结 167 10.8.3 void指针类 168 11 结构体与共用体 11.1 定义一个结构的一般形式 170 11.2 结构类变量的说明 172 9 11.3 结构变量成员的表示方法 174 11.4 结构变量的赋值 174 11.5 结构变量的初始化 175 11.6 结构数组的定义 175 11.7 结构指针变量的说明和使用 177 11.7.1 指向结构变量的指针 177 11.7.2 指向结构数组的指针 179 11.7.3 结构指针变量作函数参数 180 11.8 动态存储分配 181 11.9 链表的概念 182 11.10 枚举类 184 11.10.1 枚举类的定义和枚举变量的说明 184 11.10.2 枚举类变量的赋值和使用 185 11.11 类定义符typedef 12 位运算 12.1 位运算符C语言提供了六种位运算符: 189 12.1.1 按位与运算 191 12.1.2 按位或运算 192 12.1.3 按位异或运算 192 12.1.4 求反运算 193 12.1.5 左移运算 193 10 12.1.6 右移运算 193 12.2 位域(位段) 194 12.3 本章小结 13 文件 13.1 C文件概述 197 13.2 文件指针 198 13.3 文件的打开与关闭 199 13.3.1 文件的打开(fopen函数) 200 13.3.2 文件关闭函数(fclose函数) 202 13.4 文件的读写 204 13.4.1 字符读写函数fgetc和fputc 204 13.4.2 字符串读写函数fgets和fputs 208 13.4.3 数据块读写函数fread和fwtrite 209 13.4.4 格式化读写函数fscanf和fprintf 201 13.5 文件的随机读写 202 13.5.1 文件定位 202 13.5.2 文件的随机读写 203 13.6 文件检测函数 204 13.6.1 文件结束检测函数feof函数 204 13.6.2 读写文件出错检测函数 205 11 13.6.3 文件出错标志和文件结束标志置0函数 206 13.7 C库文件 208 13.8 本章小结

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值