c语言易错知识点

、1,stdin(键盘输入)

输入分为很多种有stdin的键盘输入,还有file*的文件输入

可以进行键盘输入的几种函数如下

gets fgets scanf getchar

前来两者读取的是一行,读到"\n"截至,但gets会把\n去掉,fgets不会,但是都会加上一个"\0"

这两个返回的值为首地址(失败都返回null(是空地址地址不让访问))

gets的用法如下

char *gets(char *str);

fgets的用法如下

去掉"\n"的方法

简洁方法如下

后两者的读取是单个字符串和字符

getchar返回ascll码,scanf返回争取读取的个数(两者读取失败都返回eof(在值上都等于-1))

注意getchar返回的是int类型,因为读取失败EOF的值为-1需要int来存储,所以这样的代码是错的

#include <stdio.h>

int main()

{ char ch; // 错误:char 范围是 -128~127 或 0~255,无法正确存储 EOF(-1)

while ((ch = getchar()) != EOF)

{ // 可能永远无法退出循环 printf("你输入的字符:%c\n", ch); } printf("读取到 EOF,结束\n"); return 0; }

日常使用中,我们经常需要手动去掉 \n(比如用 strtok(buf, "\n")buf[strcspn(buf, "\n")] = '\0'),就是因为 \n 会被 fgets 保留在字符串中,且在 \0 之前。

他们的区别如图

还有一点

2.动态分配二维数组

二维数组的定义时需要用int**

同时存储的类型为地址的大小

3,预处理

具体原理如下

宏定义易错问题

一般情况宏定义文件参与计算会按照如下规律

4,math.h

常见的函数

5,stdlib.h

较为常见的是malloc的使用:

用法为:int*p=(int*)malloc(字节数)

存储在堆区需要使用stdlib.h进行调用

6,指针

对于数组的指针,清楚数组本身的指针&arr和数组的首元素的指针arr之间的区别,其中还有语法让糖的关系

如我们传入

memcpy(copy_arr, src_arr, len * sizeof(int));意思是数组的copy

7,位运算符

按位与(&)
  • 核心用途:判断某一位是否为 1保留指定位清零其他位
  • 示例:判断数字 n 的第 3 位(从 0 开始数)是否为 1:if n & (1 << 3):(若结果非 0,说明第 3 位是 1)。
按位异或(^)
  • 核心特性:

    • 一个数异或自身等于 0(a ^ a = 0);
    • 一个数异或 0 等于自身(a ^ 0 = a);
  • 核心用途:交换两个数 (无需临时变量)、找出数组中唯一出现一次的数

  • 示例(交换 a 和 b):

    复制代码
    a = 6
    b = 3
    a = a ^ b  # a=5
    b = a ^ b  # b=6
    a = a ^ b  # a=3
    移位运算(<</>>)
  • 左移:高效的乘法(n << 1 等价于 n * 2n << 2 等价于 n * 4);

  • 右移:高效的除法(n >> 1 等价于 n // 2,仅对正数有效);

  • 注意:移位运算不会改变原数,而是返回新值。

8,大小端

网络传输一般为大端

计算机处理一般为小端

直观对比

  • 大端序:0x00地址存0x12(最高位字节),0x03地址存0x78(最低位字节),和我们手写数字12 34 56 78的顺序一致。
  • 小端序:0x00地址存0x78(最低位字节),0x03地址存0x12(最高位字节),顺序完全反过来。
相关推荐
小短腿的代码世界3 分钟前
Qt文件系统与IO深度解析:从QFile到异步文件操作
开发语言·qt
JasmineX-11 小时前
数据结构(笔记)——双向链表
c语言·数据结构·笔记·链表
harder3211 小时前
RMP模式的创新突破
开发语言·学习·ios·swift·策略模式
jinanwuhuaguo1 小时前
OpenClaw工程解剖——RAG、向量织构与“记忆宫殿”的索引拓扑学(第十三篇)
android·开发语言·人工智能·kotlin·拓扑学·openclaw
Rust研习社1 小时前
使用 Axum 构建高性能异步 Web 服务
开发语言·前端·网络·后端·http·rust
爱编码的小八嘎3 小时前
C语言完美演绎9-7
c语言
淘矿人3 小时前
从0到1:用Claude启动你的第一个项目
开发语言·人工智能·git·python·github·php·pygame
cany10003 小时前
C++ -- 模板的声明和定义
开发语言·c++
澈2073 小时前
深耕进阶 Day1:C 与 C++ 核心差异 + C++ 入门基石
c语言·开发语言·c++
love530love3 小时前
Windows Podman Machine 虚拟硬盘迁移完整指南:从 C 盘到非系统盘
c语言·人工智能·windows·podman