终于狠下心来深入学习C语言,之前学了一些皮毛,今天就先复习了一下之前学到的东西,顺便做个总结。
C语言预处理命令:预处理命令并非C语言的一部分,但它可以引导C编译器做一些额外的工作。宏定义在习惯上均以大写表示。
ANSI C的预处理命令有下面这些:
#define 宏定义
例:#define TRUE 1 //使TRUE和1具有相同意义。
#define ADD(a,b) a+b //该宏返回两数之和。
#error 使编译器停止编译,在调试时使用
#include 文件包含指令,常见的头文件包含
#if……#elif……#else……#endif 条件判断指令,用法与其他if……else一致。
#ifdef 宏名……#endif 如果定义了指定的宏,则向下执行
#ifndef 宏名……#endif 如果指定的宏未定义,则向下执行
#undef 宏名 取消指定的宏定义
#line 指定当前行号
#pragma 未理解
二维数组:C语言支持多维数组,其中二维数组是多维数组中最简单的一种。
公式:char strs[m][4] = {"a","b","c","d","1","2","3","4",}; 其中,m为行数,4为列数。
为了便于理解,我们可以二维数组像下面这样:
一个m行n列的表格:
0 | 1 | 2 | 3 | |
0 | "a" | "b" | "c" | "d" |
1 | "1" | "2" | "3" | "4" |
……(m) |
像这样的表格,我们可以通过横竖坐标来访为指定的数据。
指针:指针是C的灵魂,个人认为其概念还是比较容易掌握,但在实际编程时,绕来绕去还是稍显迷糊。
首先,指针是一个变量,它需要占用内存空间,但该变量保存的并非普通的值,而是一个地址。
对于指针的操作,可以操作两方面:直接操作它的值(是一个内存地址);操作其值指向的内存空间的值。这里有点绕,但请不要晕,我们来看看解释:
int a=0;
int b=1;
int *pa = &a;
int *pb = &b;
可以看到,我们定义了四个变量,分别是整型的a和b,以及指向整型变量的指针pa和pb。
变量pa和pb中分别保存了一个值,该值为变量a和b在内存中的地址(&为取地址运算符)。
假设a的地址为:10000,b的地址为10004。我们来分别看一下这四个变量的值:
a=0;
b=1;
pa=10000;
pb=10004;
到这里,大家因该明白指针保存的是一个地址的含义了。再看,
printf("%d",&a); //输出0
printf("%d",pa); //输出0
&a与pa均表示变量a的地址,因此输出的都是变量a的值。那么,“操作其值指向的内存空间的值”是什么意思呢?
像这样:b=*pa; //与b=a;是等价的(我们用"*"运算符,获取指针指向的内存地址的值。)
那么:*pa = 10; //与a=10是等价的,我们操作的是其值指向的内存的值
再如:pa = 10008; //此时,pa保存的将不再是变量a的地址,我们手动将pa的值改变了,这时,我们操作的是指针本身的值。
今天复习了这些重要的东西,其他比较浅显的省略了,比较深入的后面再来。
2011/07/24 傍晚 闷热