C语言复习总结

文章目录

数据类型

#define与const

#define const
在预处理阶段起作用 在编译、运行时起作用
定义的常数是一个立即数,不带类型 定义的常数是变量,带类型
占用代码段空间 占用数据段空间
每次替换都会在内存中生成备份 只会生成一个备份,节省了内存空间
预编译时便已替换,无法调试 可以调试

此外
#define作为一个简单的字符串替换,会导致边界效应

#include <stdio.h>

#define X 1
#define Y X+2
#define Z X/Y*3

int main() {
	printf("Z:%d\n", Z);
	//你以为:Z = X/Y*3 = 1/3*3 = 1
	//实际上:Z = X/Y*3 = X/X + 2*3 = 1/1 + 2*3 = 7
	//正确写法:#define Y (X+2)
	return 0;
}

const由于存储在数据段,是一个伪常量,即一个限定修改的变量,因此无法用于数组初始化以及全局变量的初始化

#include <stdio.h>

int main() {
	const int x = 1;
	
	//直接赋值会报错:
	//[Error] assignment of read-only variable 'x'
	//x = 2;
	
	//但可以通过指针间接赋值,只会给出警告:
	//[Warning] initialization discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
	int *p = &x;
	*p = 2;
	
	printf("%d", x);
}

全局变量与局部变量

#include <stdio.h>

int x = 1;

int fun_1() {
	int x = 2;
	printf("%d\n", x);//2
}

int fun_2(int x) {
	printf("%d\n", x);//3
}

int fun_3() {
	printf("%d\n", x);//1
}

int main() {
	int x = 3;
	fun_1();
	fun_2(x);
	fun_3();
	{
		int x = 4;
		printf("%d\n", x);//4
	}
	printf("%d", x);//3
	
	return 0;
}

注意

  1. C语言没有字符串类型,使用字符数组表示字符串
#include <stdio.h>
#include <stdlib.h>

#define MAX_SIZE 10

int main() {
	char *str = (char*)malloc(MAX_SIZE * sizeof(char));
	gets(str);
	puts(str);
	
	return 0;
}
  1. 数组不是基本数据类型,而是构造类型
  2. C语言中char的本质是一个整数,输出的是ASCII码对应的字符。可以直接给char赋一个整数,输出时会按照对应的ASCII字符输出。此外,char类型还可以进行运算。
#include <stdio.h>

int main() {
	char c1 = 65;
	int x1 = 65;
	char c2 = 'A';
	int x2 = 'A';
	
	printf("c1:%c, x1:%d, c2:%c, x2:%d\n", c1, x1, c2, x2);
	//printf:c1:A, x1:65, c2:A, x2:65
	printf("c1+'2':%d, c1+'2':%c", c1+'2', c1+'2');
	//printf:c1+'2':115, c1+'2':s
		
	return 0;
}

C语言复习总结

函数与程序结构

外部函数

C语言复习总结

几个printf()的输出格式

#include <stdio.h>

int main() {
	printf("%o\n", 8);//10,八进制无符号整数
	printf("%x\n", 16);//10,十进制无符号整数
	char *str = "atreus";
	printf("%s\n", str);//atreus,输出字符串
	printf("%c\n", str[0]);//a,输出单个字符
	printf("%p\n", str);//0000000000404008,输出指针地址
	return 0;
}

数组

指针

字符串

结构体

联合体与枚举类型

位运算

预处理器

文件

存储管理

标准函数库

上一篇:[C++讨论站]如何将中值表达式转换为后缀表达式并计算


下一篇:hdu1171