Featured image of post C语言杂记

C语言杂记

学习C语言的时候简单记录的一些东西,大多为网上的信息摘录。

目录

常见的C99头文件

  • stdio.h : 标准IO接口 printf(), scanf()

  • stdlib.h : 通用工具 malloc(), free(), atoi()

  • stdarg.h : 可变参数处理 va_list

  • stddef.h : 常用类型以及宏的定义 size_t, NULL

  • string.h/strings.h : 字符串操作函数 strcat(), strcasecmp()

  • ctype.h : 字符操作函数或宏 toupper()

  • time.h : 时间和时区操作函数 time()

  • stdint.h : 整数类型及各整数类型的极值

  • stdbool.h : true、false等bool类型

  • math.h : 数学函数

    函数 含义
    abs(x) 返回x的绝对值
    sin(x) 返回x的正弦值(弧度制)
    cos(x) 返回x的余弦值
    tan(x) 返回x的正切值
    exp(x) 返回Ex的值
    asin(x) 返回x的反正弦值
    acos(x) 返回x的反余弦值
    atan(x) 返回x的反正切值
    cbrt(x) 返回x的立方根

常见C语言预处理器指令

  • #include : 包含一个源代码文件

  • #define : 定义宏

  • #undef : 取消已定义的宏

  • #ifdef : 如果宏已经定义,则返回真

  • #ifndef : 如果宏没有定义,则返回真

  • #if : 如果给定条件为真,则编译下面的代码

  • #else : #if 的代替方案

  • #elif : 如果前面的 #if 给定条件不为真,当前条件为真,则编译下面代码

  • #endif : 结束一个 #if……#else 条件编译块

  • #error : 当遇到标准错误时,输出错误消息

  • #pragma : 使用标准化方法,向编译器发布特殊的命令到编译器中

位运算符

运算符 描述 实例
& 按位“与”
| 按位“或”
^ “异或”
~ 按位“取反”
<< 二进制“左移”
>> 二进制“右移”

数据类型

数据类型 大小Size
char 1字节
int 2~4字节
short int 2字节
long int 4字节
float 4字节
double 8字节
long double 10字节

C中的枚举Enum

简单的示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>

int main(int argc, char *argv[])
{
    enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } day;
    scanf("%d", &day);

    switch(day){
        case Mon: puts("Monday"); break;
        case Tues: puts("Tuesday"); break;
        case Wed: puts("Wednesday"); break;
        case Thurs: puts("Thursday"); break;
        case Fri: puts("Friday"); break;
        case Sat: puts("Saturday"); break;
        case Sun: puts("Sunday"); break;
        default: puts("Error!");
    }

    return 0;
}

指针、可怕的指针

指针是一个变量,它存储另一个变量的内存地址作为其值。

函数指针(用来存放函数的地址)

指针函数(返回值是指针的函数)

例如strcpy(char *str1, const char *str2)返回str1

另外需要注意的杂项

  1. 使用const修饰的只读变量不具有“常量表达式”属性,因此无法用来表示定长数组的大小,或者在case语句中使用。“常量表达式”本身会在程序编译时被求值,而“只读变量”只能在程序运行时才被得知。

  2. 变量存储类型:

    • auto默认;
    • register声明告诉编译器,它所声明的变量在程序中使用频率较高,因此可以将register变量放在机器的寄存器中,使程序更小、执行速度更快,(但是编译器可以忽略此选项);
    • static
    • extern
  3. *p++问题

若有定义int i =2, a[10], *p=&a[i];,则*p++等价于a[i++]

++的优先级比*高,但是++是后缀,先使用值再加加,所以是加之前的值去解引用。

待续未完……此外,如有侵权,深感歉意,烦请邮箱联系。

Licensed under CC BY-NC-SA 4.0
最后更新于 2024-08-03 23:31 CST