10.8

编程入门 行业动态 更新时间:2024-10-09 00:42:24

10.8

10.8

  1. 常量字符串:用双引号引起来的字符序列,结尾带有\0。储存在常量区,只能读,不能写。
  2. 使用字符数组对字符串进行存储,字符串仍然存储在常量区。
  3. 字符串的输入:scanf不可以输入空格,回车键留在缓存区;gets把所有的都读取进来,把回车替换成\0,可能造成越界;fgets(地址,个数,stdin)读取个数减1个字节,留最后一位添加\0,若输入长度小于数组长度,则读取回车。
  4. strlen()测出可见字符串长度,不算\0;strcpy(地址,地址)把第二个复制到第一个里面;strcat(地址,地址)把第二个字符串拼接到第一个字符串的末尾,尾部赋\0;strcmp(字符串,字符串)对第一个和第二个进行比较,当返回值为0,则二者完全相等,当遇到第一个不相等的字符则直接跳出,并根据两值相减,返回对应得正负值;memcpy(字符串,字符串,字符个数)取任意区域字符串对第一个字符串进行相应赋值。其中字符串均为字符串地址。
  5. 字符指针数组存储得为字符得首地址,字符串仍在常量区。字符串数组:将字符串存储在二维数组中,可进行更改。
  6. 结构体定义:struct 结构体名{   已有得数据类型 变量;……};;本质上为数据类型。访问结构体中的成员:结构体变量.成员名称。
  7. 结构体指针:struct 结构体名 *变量名。P->成员名称:结构体指向成员。访问成员:(*p).成员 或者  p->成员。p为指针变量。
  8. 结构体数组,可以和一维数组比较。
  9. 用指针访问一维数组(struct 结构体名 *p;p=a;):1.p++;p->成员名;(*p).成员名;2.p+i; (p+i)->成员名;(*(p+i)).成员名;3.p[i].;p[i].成员名。
  10. 嵌套结构体:被嵌套结构体要在结构体之前定义。每个结构体只能访问自己成员,逐级访问。
  11. 结构体函数。定义的结构体类型,可以当作普通的数据类型应用,赋值等
  12. 无参宏定义:#indefine 宏名(最好用大写与变量区分) 宏体(可以不写)。在预处理过程中,先进行对应替换,在其他步骤在进行运算。#undef 宏名:提前结束生存期。
  13. 带参宏定义:#indefine 宏名(参数,……,参数) 宏体  (为防止替换时改变本来意图,可加括号提高优先级)。节约调用时间
  14. 条件编译:#if  常量表达式(为真执行)语句块 -#else 语句块-#endif#if  常量表达式(为真执行)语句块-#elif 常量表达式 -#else 语句块-#endif

        1符合前面条件直接停止。

        #ifdef 宏名  语句块-#else 语句块-#endif(如果定义了宏明,执行语句块)

          #ifndef 宏名  语句块-#else 语句块-#endif(如果没定义了宏明,执行语句块)

15.头文件包含:“.h文件名”可以包含函数声明、结构体、宏定义、全局变量声明。

防止头文件重复定义可用#ifndef _名_  #define _名_ 或者#pragma once

如果头文件和源文件不在一个目录下,要在头文件包含的时候加上相对路径或者绝对路径。并且在运行的时候gcc xx.c -o xx.h -I 头文件目录路径

16.查看预编译时文件:gcc xx.c -o xx.i -E

17.预定义宏:__FILE__(为两个下划线)__DATE__,__TIME__,__LINE__,__func__

18.构体对齐原则:

1、每一个成员按照自己的字节数对齐

2、最后总的字节数是最大对齐数的整倍,如果不是,加到第一个整数倍为止

3、结构体的对齐数就是最大成员的对齐数

4、如果有成员是数组,则按照每一个元素的大小对齐

ps  :  成员按照从小到大的顺序排列是最节省空间的!!!!

19.typedef  类型名 重新定义的类型名   有利于程序的通用和移植

20. 内存四区:

    栈区:  存储临时变量, 局部变量、 形参 、保护现场

    堆区:   是由程序员自己管理, 申请空间:malloc   释放:free

    数据段: 存储全局变量/静态变量/常量

             未初始化数据段:未初始化的全局变量和静态变量, 默认初始化为0

             初始化数据段:初始化的全局变量和静态变量

             常量区:   常量,  const +静态变量/全局变量,  只读的

正文段:  运行的代码    ,  只读的

21.malloc(个数):定义太少,内存越界;不释放内存,内存泄漏。不要二次释放。释放完后指针指向NULL。返回值为一个通用指针,要进行强转,每次都要判断是否申请成功。

22.关键字const:常变量,拥有常量的属性,防止变量被恶意修改。const int *p=&a;修饰指针指向的内存;int *const p=&a;修饰指针的指向。可以同时使用两种限制。

23.enum枚举:enum 名称{常量1,……};有分号。常量名默认从0开始,依次递增,也可以进行赋值,从赋值后递增。可以gdb :p \d 常量名称  查看常量值。

24.static静态变量:修饰局部变量,生存期变为程序开始到结束,修饰全局变量,作用域变为本.c文件。修饰函数,变为内部函数,只能在定义的文件内使用。

25.extern全局:全局函数的声明,外部函数声明和static做对比。

26.一级指针:传递变量地址。二级指针:传递一级指针地址。(主要是指针具有等级性)

27.fopen(“路径文件名”,“模式”):打开文件,模式:a(追加),w(写),r(读)。ab(后面加b,以二进制读写。写和追加会有创建文件的功能。返回值为FILE *类型。

28.fwrite/fread(内存起始地址,类型大小,个数,文件地址)返回值为写入或读取个数,小于每次写入读取个数为失败。

29.fprintf/fscanf(文件地址,和printf/fscanf相同)

30.fclose每次操作文件后,要关闭文件。

31.顺序结构更方便查找,链表结构更方便插入

32.链表尾插法:1.创建新的节点并初始化2.将新节点插入链表。若是空链表则用头地址保存新节点地址,若不是则用上一个节点的next保存新节点地址。

33.链表头插法:1.创建新节点并初始化2.将新节点插入链表。若是空链表则用头地址保存新节点地址,若不是则用新节点的next保存上一个头地址,并放到第一个节点前面。

34.头插法会改变头指针指向,尾插法需要多一个尾地址指针进行移动。

35.对于链表的任何操作都要考虑三种情况:头部,中间,尾部。

更多推荐

10.8

本文发布于:2024-02-13 10:03:16,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1757990.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!