重新将C语言的知识点看了一遍,把自己遗忘以及容易出错的知识点记录下来。各个知识点之间没有什么联系。
1. C语言虽然不限制标识符的长度,但是它受到不同编译器的限制,同时也受到具体机器的限制。例如在某个编译器中规定标识符前128位有效,当两个标识符前128位相同时,则认为是同一个标识符。
2. C语言的标识符区分大小写。
1.0在C语言中可写成1.
0.1在C语言中可写成.1。
int a = 2;
a *= 2 + 3; //运行完后,a的值是10
一定要注意,首先要在"2+3"的上面打上括号,变成(2+3)再运算。
z = (2, 3, 4); // z = 4
z = 2, 3, 4; // z = 2
要知道"="运算符的优先级大于","运算符,而逗号运算符是返回最后一个值的。(2,3,4)的结果为4,然后再把4赋值给z。而式子2则是先执行z=2,然后返回4,但这个返回值没有赋给任何变量。
int x = 017;
printf("%d", x); //输出15
printf("%o", x); //输出17
printf("%#o", x); //输出017
printf("%x", x); //输出11
printf("%#x", x); //输出0x11
int x = 12, y = 34;
char z = 'a';
printf("%d ", x, y); //一个格式说明,两个输出变量,后面的y不输出
printf("%c", z);
格式说明 表示内容
%d int
%ld long
%f float
%lf double
%% 输出一个百分号
%c char
%s 字符串
%o 八进制
%#o 带前导的八进制
%x 十六进制
%#x 带前导的十六进制
scanf("%d%d%*d%d", &a, &b, &c); //跳过输入的第三个数据
int a[2][3]={1,2,3,4,5,6};
int a[2][3]={1,2,3,4,5,}; //合法,后面一个默认为0
int a[2][3]={{1,2,3},{4,5,6}}; //合法,每行三个
int a[2][3]={{1,2,},{4,5,6}}; //合法,第一行最后一个默认为0
int a[2][3]={1,2,3,4,5,6,7}; //不合法,赋值个数多于数组的个数了
int a[][3]={1,2,3,4,5,6}; //合法,可以缺省行的个数
int a[2][]={1,2,3,4,5,6}; //不合法,不可以缺省列的个数
a[2]变成*(a+2) a[2][3]变成*(a+2)[3],然后再可以变成*(*(a+2)+3)
1. char ch[10]={"abcd"};
2. char ch[10]="abcd";
3. char ch[10]={"a","b","c","d"};
4. char *p="abcd";
5. char *p;
p="abcd";
6. char ch[10]; //错了,数组名不可以赋值
ch="abcd";
7. char *p={"abcd"}; //错了,不能够出现大括号
1. while( (*t=*s)!= null ){s++; t++;} //完整版本
2. while( *t=*s ){s++; t++; } //简单版本
3. while( *t++=*s++ ); //高级版本
1. typedef int qq; 那么 int x 就可以写成 qq x
2. typedef int *qq; 那么 int *x 就可以写成 qq x
static int x; //默认值为0
int x; //默认值为不定值
1. 每个成员的起始地址都是相同的,所以一次只能存放一种类型的成员,也就是每次只能有一个成员在起作用。
2. 在存入一个新的成员信息后,原有的成员信息就会被覆盖而失去作用。
3. 整个共用体型的起始地址与各成员的起始地址是同一地址。
4. 关于共用体类型的变量,不能为其赋值,不能定义共用体变量时对其初始化,也不能引用共用体变量名得到一个值。
5. 共用体类型变量不可以作为函数的参数传递,也不可以作为函数返回值,但是可以使用指向共用体的指针。
6. 共用体可以出现在机构体类型的定义中,也可以定义共用体类型的数组,反之也成立。
1. 静态内存的分配是在程序开始编译时完成的,不占用CPU资源;而动态内存的分配是在程序运行时完成的,动态内存的分配与释放都是占用CPU资源;
2. 静态内存是在栈上分配的;而动态内存是在堆上分配的。
3. 动态内存分配需要指针和引用数据类型的支持,而静态内存不需要。
4. 静态内存分配是在编译前就已经确定了内存块的大小,属于按计划分配内存;而动态内存分配是在程序运行过程中,按需分配。
5. 静态内存的控制权交给编译器,动态内存的控制权交给程序员。