C语言知识点笔记1
此笔记是我考研备考专业课期间听课的一些C语言知识点混记,可能会有一点乱,有需要的朋友们可以翻阅一下,有利于巩固C语言知识点!
-
main函数为主函数,是程序的入口 ,main函数有且只有一个
-
int main:main前面的int表示main函数调用返回一个整型值
-
printf打印函数 \n换行
-
#include <stdio.h> 包含一个叫stdio.h的文件,stdio -- standard input output
-
%d打印整型 %c打印字符 %f打印浮点型 %p以地址的形式打印 %x打印16进制数字 %s打印字符串
-
计算机中的单位: (1)bit 比特位 一个比特位存放一个二进制位0或1 (2)byte 字节 一个字节等于八个比特位的大小 如10110001 (3)kb 1kb=1024byte mb gb tb pb 占字节数: char 1; short 2; int 4; long 4; long long 8; float 4; double 8
-
常量: (1)字面常量 (2)const修饰的常变量 const int num=10; // num就是常变量-具有常属性(不能被改变的属性) (3)#define定义的标识符常量 #define MAX 10000 (4)枚举常量:可以一一列举的常量 enum sex {MALE,FEMALE,SECRET}; 输出默认为0,1,2;可以赋初值
printf("%c\n", '\130')-->输出X, X的ascll码值为88 八进制 \ddd
printf("%c\n", '\x30')-->输出0, 0的ascll码值为48 十六进制 \xdd
小练习:strlen("c:\test\328\test.c") ; 结果为14
c : \t e s t \32 8 \t e s t . c
(\t算一个;因为八进制没有8,所以\32算一个)
- 操作符: (1)算术操作符:+ - * / % float a= 9/2; -> 4.000000 float a= 9/2.0; -> 4.500000 (2)移位操作符:>> << 左移操作符<< : 移动的是二进制位 int a=2; int b=a<<1; 00000000000000000000000000000010 -->00000000000000000000000000000100(32位) 2-->4 (3)位操作符: &按位与 |按位或 ^按位异或 (4)赋值操作符:= += -= *= /= ^= |= >>= <<= (5)单目操作符:只有一个操作数 ! (0为假,非0为真) & - + sizeof(是一个整形操作符,不是函数)
sizeof:
int arr[10]={0};
printf("%d\n",sizeof(arr));//结果为40,4*10,计算的是数组的大小(单位字节)
printf("%d\n",sizeof(arr[0]));//4
int sz = sizeof(arr)/sizeof(arr[0]); //10 用于计算数组个数
-
~按位取反: 取二进制位,把所有二进制位中数字,1变成0,0变成1(全部取反,包括符号位) (1)int a = 0; printf("%d\n",~a);//输出-1
(2)整数在内存中存储的是补码; 一个整数的二进制表示有三种:原码,反码,补码 -1: 1000000000000000000000000001(原码) 11111111111111111111111111111110 (反码)符号位不动,其他位按位取反 11111111111111111111111111111111 (补码)反码加一 (这只针对负数的计算,正整数的原码、反码、补码相同)(3)整数a为0:00000000000000000000000000000000 ~a:11111111111111111111111111111111(这是个补码)转换为-1 -
逻辑操作符:&&逻辑与 ||逻辑或 (1)int a=3,b=5; printf("%d\n",a&&b);//输出1 (b若为0,输出0)一假则假,全真才真(与&&) (2)int a=3,b=0; printf("%d\n",a||b);//输出1 (a若为0,输出0)一真则真,全假才假(或||)
-
条件操作符(三目操作符): exp1?exp2:exp3 (1)exp1成立,exp2计算,整个表达式的结构是:exp2的结果 (2)exp1不成立,exp3计算,整个表达式的结构是:exp3的结果 (3)max = a > b ? a : b;
13.逗号表达式:逗号隔开的一串表达式
int a =0;
int b =3;
int c =5;
int d =(a=b+2,c=a-4,b=c+2);// a=5 c=1 b=3(b赋给d)
//逗号表达式,是从左向右依次计算的
//整个表达式的结果是最后一个表达式的结果
printf("%d\n",d); //输出结果为3
- c语言提供的关键字: (1)C语言提供的,不能自己创建关键字 (2)关键字不能作为变量名 auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if while static (1)auto :是自动的,每个局部变量一般都是auto修饰的,一般省略 (2)extern是用来声明外部符号的 (3)register寄存器关键字(大量频繁被使用的数据,放在寄存器中,提升效率) (4)signed 有符号的 10 -20 unsigned无符号的 (5)static静态的 (6)union 联合体(共用体) (7)void无,空的 (define include不是关键字,是预处理指令)
15.static-静态的:
(1)static修饰局部变量,改变了局部变量的生命周期(本质上是改变了变量的存储类型)
void test()
{
//int a=1; //输出结果2222222222
static int a = 1; //输出结果 2 3 4 5 6 7 8 9 10 11
a++;
printf("%d",a);
}
int main()
{
int i=0;
while(i<10)
{
test();
i++;
}
return 0;
}
(2)static修饰全局变量,使得这个全局变量只能在自己所在的源文件(.c)内部可以使用,其他源文件不能使用 本质:当全局变量在其他源文件内部可以被使用时,是因为全局变量具有外部链接属性,但是被static修饰之后,就变成了内部链接属性,其他源文件就不能链接到这个静态的全局变量了。 (3)static修饰函数,使得这个函数只能在自己所在的源文件(.c)内部可以使用,其他源文件内部不能使用 本质:static是将函数的外部链接属性变成了内部链接属性。(和static修饰全局变量一样)
- define是一个预处理指令 (1)define定义符号 #define MAX 1000 (2)define定义宏
#define ADD(x,y) ((x)+(y))
int main()
{
printf("%d\n",4*ADD(2, 3)); //输出结果为20
return 0;
}