C语言 小记

本文讲解了一些关于C语言的小知识,以飨各位读者,各位可以根据目录找到自己所需,后续还会在本文中持续更新,请大家多多支持!

目录

1.switch语句

2.break语句

3. continue语句

4.if语句

5.strlen函数

6.sizeof操作符

7.goto语句

8.strcmp函数

9.double

10.数组

11.内置类型

12.转义字符

13.static

14.库函数的使用

15.实参与实参

16.打印出的数字对齐方式

17.\t水平制表符

18.全局变量

19.局部变量

20.判断一个数是不是2的n次方

21.const的用法

22.关键字typedef

23.assert函数

24.bool函数

25.malloc函数的用法


1.switch语句

switch语句中表达式的类型只能是:整形和枚举类型

switch语句里面的case和default的顺序可以随意调换

并且case表达式不要求顺序

如果switch语句里的case没有出现break,

则持续往下执行case,如果没有,则执行default下的内容,直到出现break,

如果不出现break,则跳出这个Switch语句。

switch语句中case后的表达式只能是整形常量表达式

continue是用来结束本次循环的,而switch不是循环,因此其中不能使用continue关键字。

2.break语句

break语句一般只跳出本次循环,

也就是跳出本次的大括号

3. continue语句

continue语句只是跳过本次循环后面的代码,

而本次循环还继续进行

4.if语句

像一个大括号里的,if、else if语句,

只是一个if语句,多个else if只是多分枝而已,

执行一个if语句之后不会再执行下一个else if。

但如果出现了多个if,则是多个if语句。

5.strlen函数

strlen()是一个库函数,是专门求字符串长度的,只针对字符串

可以获取字符串中有效字符的个数

从参数给定地址的第一个字符算起,至“\0”之前的长度(不包括\0),统计\0之前出现的字符个数

6.sizeof操作符

sizeof()是用来计算变量(类型)所占空间的字节大小,不关注内存中存放的具体内容

可以获取数组的总大小

计算一个数组中元素的个数,可以这么表示

arr[10]={1,2,3,4,5,6,7,8,9,10}

sz=sizeof(arr)/sizeof(arr[0])

不能在函数内部求数组元素的个数

7.goto语句

不可以跨函数使用

8.strcmp函数

strcmp函数是比较两个字符串的大小的函数

strcmp函数需要引用头文件#include <string.h>

两个字符串比较不可以直接使用==,

应该用strcmp函数,例如

strcmp(input,“我是笨蛋”)==0

9.double

如果想要出现小数,计算时,除数和被除数一定要有一个带小数的数字,比如,sum = sum + 1.0/i

在输出时,如果输出printf("%lf", sum),则默认输出6位小数,这里的l是字母L的小写

要想自定义输出的小数位数,则输出printf("%.1f", sum),这里的1是数字l,这里输出1位小数,这里的1可以变换成其他数字,记住不要忘了%和1f中间的小数点。

10.数组

数组中第一个数字的下标是0,比如,arr[10]={1,2,3,4,5,6,7,8,9,10},第一个数字用arr[0]表示。

如果数组arr的[]里没有值,则根据后面大括号的里的元素个数来确定这个[]。

数组是一组相同类型元素的集合

数组如果初始化,可以不指定数组的大小

数组的类型

int arr[10]={1,2,3,4,5}

int [10]就是它的类型,[10]也是它类型的一部分

11.内置类型

char //字符数据类型         占1字节

short //短整型                    占2字节

int //整形                             占4字节

long //长整型                      占4字节

long long //更长的整形     占8字节

float //单精度浮点数          占4字节

double //双精度浮点数 占8字节

12.转义字符

'\n' 转义字符,代表换行

'\060' 转义字符,060八进制数据,十进制为48,表示ASCII码为48的'0'

'\b' 转义字符,表示退格

13.static

(1)static修饰变量

a.函数中局部变量:

声明周期延长:该变量不随函数结束而结束

初始化:只在第一次调用该函数时进行初始化

记忆性:后序调用时,该变量使用前一次函数调用完成之后保存的值

存储位置:不会存储在栈上,放在数据段

b.全局变量

改变该变量的链接属性,让该变量具有文件作用域,即只能在当前文件中使用

c.修饰变量时,没有被初始化时会被自动初始化为0

(2)static修饰函数

改变该函数的链接属性,让该函数具有文件作用域,即只能在当前文件中使用

14.库函数的使用

在使用库函数时,必须要包含该库函数所在的头文件,

否则编译器将不能识别

库函数是语言设计者为了让用户能够更好的使用,

而给出的,但并不能解决用户的所有问题,

因此其他问题还需要用户自己写方法解决

15.实参与实参

形参和实参是两个不同的变量,形参和实参可以同名。

传值调用,形参按照值的方式传递,将来形参就是实参的一份临时拷贝,修改形参不会影响外部的实参。

传址调用,形参按照指针方式传递,将来形参就是实参地址的一份拷贝,形参指向的是实参,修改形参指针指向的内容,就是在操作实参。

16.打印出的数字对齐方式

%2d —— 2位右对齐

%-2d —— 2位左对齐

17.\t水平制表符

可以让打印出的空格更宽一些

18.全局变量

全局变量,静态变量没有给初始值时,编译器会默认将其初始化为0

全局变量,静态变量都是放在静态区

19.局部变量

局部变量是放在栈区,不初始化,默认值是随机值

20.判断一个数是不是2的n次方

如果要判断一个数是不是2的n次方
if ((n & (n - 1)) == 0)//这里用的是按位与,先把数字转换成二进制数再计算
{

}

21.const的用法

    const 修饰指针变量
    1.const放在*的左边,
    意思是:p指向的对象不能通过p来改变了,但是p变量本身的值是可以改变的,限制的是*p
     const int* p = &num;
     *p = 20;//error
     int n = 20;
     p = &n;//ok
    2.const放在*的右边
    意思是:p指向的对象是可以通过p来改变的,但是不能修改p变量本身的值,限制的是p
    int* const p = &num;
    *p = 0;//ok
    int n = 100;
    p = &n;//error

22.关键字typedef

数据类型重命名

typedef <数据类型> <别名>

typedef struct LNode LNode

以后直接运用LNode代替struct LNode即可

typedef struct LNode
{
    ElemType data;
    struct LNode* next;
}LNode,*LinkList;
//等价于下面的
struct LNode
{
    ElemType data;
    struct LNode* next;
};
typedef struct LNode LNode;
typedef struct LNode* LinkList;

23.assert函数

C语言中的assert函数是一个宏,用于在程序中进行断言检查。它的作用是在程序运行时判断一个表达式是否为真,如果为假,则触发断言失败,程序会终止执行,并输出错误信息。

assert函数的用法如下:

#include <assert.h>

void assert(int expression);

其中,expression是需要进行断言检查的表达式。

当expression为真时,assert函数不会有任何操作,程序继续执行。但当expression为假时,assert函数会触发断言失败,程序会立即终止执行,并输出错误信息,包括断言失败的文件名、行号和失败的表达式。

assert函数的使用可以帮助我们在开发过程中快速发现程序中的错误和问题,提高代码的健壮性和可靠性。

24.bool函数

C语言中没有内置的bool类型和bool函数。但是可以通过使用标准库中的stdbool.h头文件来引入bool类型和相关函数的定义。

在stdbool.h头文件中,定义了bool类型以及两个常量值true和false。bool类型只能取true或false两个值,用于表示逻辑真和逻辑假。

使用bool类型可以方便地进行逻辑判断和条件控制。例如,可以使用bool类型的变量来保存条件判断的结果,然后根据结果执行相应的代码块。

以下是一个示例代码,演示了bool类型的用法:

#include <stdbool.h>
#include <stdio.h>

bool isEven(int num) {
    if (num % 2 == 0) {
        return true;
    } else {
        return false;
    }
}

int main() {
    int number = 10;
    bool result = isEven(number);
    
    if (result == true) {
        printf("%d is even.\n", number);
    } else {
        printf("%d is odd.\n", number);
    }
    
    return 0;
}

在上述代码中,定义了一个isEven函数,用于判断一个整数是否为偶数。函数返回一个bool类型的值,表示判断结果。在主函数中,调用isEven函数并将返回值保存在result变量中,然后根据result的值输出相应的结果。

25.malloc函数的用法

malloc函数是C语言中用于动态分配内存的函数。它的用法如下:

首先,需要包含stdlib.h头文件,该头文件中包含了malloc函数的声明。

malloc函数的原型如下:
void* malloc(size_t size);
其中,size_t是一个无符号整数类型,表示要分配的内存大小。

调用malloc函数时,需要传入要分配的内存大小作为参数,并且它会返回一个指向分配内存的指针。

使用malloc函数分配内存后,需要检查返回的指针是否为NULL,以确保内存分配成功。

分配的内存可以通过指针进行访问和操作,可以使用指针进行读写操作。

使用完分配的内存后,需要使用free函数释放内存,以避免内存泄漏。

下面是一个示例代码,演示了malloc函数的用法:

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

int main() {
    int* ptr;
    int size = 5;

    // 分配内存
    ptr = (int*)malloc(size * sizeof(int));

    // 检查内存是否分配成功
    if (ptr == NULL) {
        printf("内存分配失败\n");
        return 1;
    }

    // 使用分配的内存
    for (int i = 0; i < size; i++) {
        ptr[i] = i + 1;
    }

    // 打印分配的内存
    for (int i = 0; i < size; i++) {
        printf("%d ", ptr[i]);
    }

    // 释放内存
    free(ptr);

    return 0;
}

  • 70
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mozi-goethe

您的鼓励将是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值