C语言易错知识点总结

1.c语言中%d, %o, %f, %e, %x的意义

  • %d整型输出,
    • %ld长整型输出
  • %o以八进制数形式输出整数
  • %x以十六进制数形式输出整数
  • %f用来输出实数,以小数形式输出
  • %e以指数形式输出实数

2.C语言中的八进制

  • 在写代码的时候,八进制数字前面必须加上0
  • printf函数输出八进制的时候,前面是没有0的
  • 转义字符反斜线后的八进制数字前面不用加0
    • eg: ‘\101’ 代表字符 代表字符 ‘A’
    • 转义字符多用于printf中,scanf中不常用

3.赋值运算符=

a = b;//将b的值赋给a
a = b = c;//先将c的值赋给b, 再将b的值赋给a
//等价于下面式子
a = (b = c);

//错误写法
a = b + c = 1;
//不能给b+c赋值为1,因为这样变量b和变量c的值都不知道

4.关于字符变量

#include<stdio.h>
void main(){
    char ch;
    scanf("%3c", &ch);
    printf("%c", ch);
    //在这里虽然scanf函数中,%3c限制了字符的长度为3位,
    //但是字符输入只有一个字符,故最后结果没影响
    //比如:输入 abc
    //      输出 a
}

5.c语言中的输入输出

4.1 字符的输入输出

字符输出函数putchar()

char ch = 'a';
putchar(ch);
//其中ch只能是字符变量或者字符常量,每调用一次ch,就向显示器输出一个字符
4.2 字符串的输入输出

getchar() getch() getche()

getchar()函数丛键盘上读入一个字符,并显示该字符。
注意: 这个函数括号中没有参数,该函数的输入一直到回车才结束,
回车前的所有字符都会显示在屏幕上,但是只有第一个字符作为函数的返回值。

4.3 字符串输入/输出

gets()函数

  • 空格不会停止字符串的读入,知道遇到了enter键
  • gets(字符串变量名);

puts()函数

  • puts(xxx);
  • 这里xxx可以是:字符串数常量,字符指针或字符数组名。
#include <stdio.h>
void main(){
    char str[80];
    gets(str);
    puts(str);
}
4.4 格式的输出printf()
格式符格式说明
d或i以带符号的十进制整型进行输出(正数省略符号)
o以八进制的无符号整数进行输出(输出的结果没有前导0)
x或X以16进制无符号帧数形式输出整数(不输出前导符号0x)
u以无符号十进制整数形式输出整数
c以字符形式输出,输出一个字符
s以字符串形式输出,输出的字符至结尾符’\0’为止
f以小数形式输出实数,默认输出6位小数
#include <stdio.h>
void mian()
{
    int x = 28;
    unsigned y;
    long z;
    float sum;
    y = 456;z = 23432; sum = 255.4;
    printf("sum=%f, %8.1f");
    //%8.1f中,8指的是数据的宽度,若本身宽度小于8,则用空格代替
    //.1代表数据的精度,1就是保留小数点后一位
}
格式输入函数scnaf()
  • 输入函数的返回值为输入数据的个数

6.多路分支switch语句

switch(表达式)
{
    case 常量1: 语句1;
    case 常量2: 语句2;
    ...
       
    case 常量: 语句n;
        default :语句n+1;
}

语义:

  • 首先计算swithc后圆弧内表达式的值,然后逐个与case后面的常量进行比较。
  • 当与某个case后的常量值相等时,则执行该case后的语句。
  • 然后顺序执行后面的语句。
  • default后面的语句无论啥情况都会执行。

7.二维数组的初始化/定义

  • 像一维数组那样用逗号,挨着赋值,按照存储顺序一次给前面的各个元素赋值
int b[2][3] = {1, 2, 3, 4, 5};
//方括号里的2,3代表这个二维数组有两行三列,共6个元素
//这个二维列表本来应该有6个元素,所以,5后面的1个元素都默认为0
  • 在初值列表中,将每行元素的初值用花括号括起来成为一组,按行分段赋初值。
int b[2][3] = {{1, 2, 3}, {4, 5, 6}};
  • 也可以对部分元素赋值
int b[2][3] = {{1, 2}, {3}};
/*相当于
 *1 2 0
 *3 0 0
 */

int b[2][3] = {1, 2, 3};
/*1 2 3
 *0 0 0
 */

8.局部变量全局变量

  • 主函数(main()函数)中的变量也属于局部变量,其作用范围仅限于主函数内,所有其他被调用的函数均不能使用
  • 编译时,系统不会为局部变量分配内存,而是在程序运行过程中,当局部变量所在函数被调用时,编译系统才会根据需要临时分配内存。函数调用结束时,内存空间释放。
  • 全局变量
    • 所有函数外定义,所有函数(包括main函数) 外定义的变量即为全局变量。
    • 全局变量放在静态存储区中
    • 作用域是丛定义位置到本源文件结束。
    • 全局变量若不进行初始化,系统将会为其自动赋值为0,字符型赋值字符'\0'
    • 在同一源文件中,全局变量和局部变量同名,在局部变量的作用域内,全局变量不起作用。

9.数据类型存储类型

10.静态存储方式动态存储方式

变量生存区:从变量分配从初空间到释放空间的全部时间
内存中供用户使用的存储空间:

  • 程序区:存放程序代码
  • 静态存储区:存放数据
    • 编译时就分配空间
    • 在整个程序运行期间,该变量一直占有固定的存储空间,程序结束后,这部分空间才释放
    • 生存周期:整个程序
    • 哪些变量放在静态存储区?静态局部变量,全局变量。
  • 动态存储区域: 存放数据
    • 编译时不分配空间,只有当变量所在函数被调用时,编译系统才临时为该变量分配一段内存单元。
    • 函数调用结束,所占空间被释放
    • 生存周期:仅在函数调用期间。

11.静态局部变量

  • 静态局部变量调用时,不会重新赋值,而是使用上次函数调用结束时保留下来的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

辛伯达岛

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

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

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

打赏作者

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

抵扣说明:

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

余额充值