随笔分类 - C
摘要:枚举:一、枚举的概念: 比如,你可以用一个枚举类型的变量来表示季节,因为季节只有4种可能的取值:春天、夏天、秋天、冬天。 二、枚举类型的定义: 一般形式为:enum 枚举名 {枚举元素1,枚举元素2,⋯⋯}; enum Season {spring, summer, autumn, winter}; 三、枚举变量的定义: 前面只是定义了枚举类型,接下来就可以利用定义好的枚举类型定义变量。 跟结构体一样,有3种方式定义枚举变量 1.先定义枚举类型,再定义枚举变量 enum Season {spring, summer, autumn, winte...
阅读全文
摘要:一、什么是结构体: 数组:内部的元素是相同类型的。 结构体:允许内部的元素是不同类型的。 二、结构体的定义: 1.定义形式: 结构体内部的元素,也就是组成成分,我们一般称为"成员"。 结构体的一般定义形式为: 1 struct 结构体名{ 2 3 类型名1 成员名1; 4 5 类型名2 成员名2; 6 7 ⋯⋯ 8 9 类型名n 成员名n; 10 11 }; struct是关键字,是结构体类型的标志。 2...
阅读全文
摘要:一、在Java中,全局变量的定义没有严格的位置规定: 二、在C语言中,全局变量定义的位置是有限制的: 默认情况下,一个函数不可以访问在它后面定义的全局变量 第1种办法:将变量a定义在main函数的前面 第2种办法:在main函数前面对变量a进行提前声明 三、重复定义同一个变量: 重复定义同一个变量a代表着同一个变量。 四、不同源文件中的同名变量: 假如在另一个源文件中也有全局变量int a;,那么这两个源文件的所有全局变量int a;都代表着同一个变量。 五、static关键字: 但很多时候,我们并不想让源文件中的全局变量跟其他源文件共享,相当于...
阅读全文
摘要:一、extern与函数:(外部函数) 如果一个程序中有多个源文件(.c),编译成功会生成对应的多个目标文件(.obj),这些目标文件还不能单独运行,因为这些目标文件之间可能会有关联,比如a.obj可能会调用c.obj中定义的一个函数。将这些相关联的目标文件链接在一起后才能生成可执行文件。 先来理解2个概念: 1.外部函数:如果在当前文件中定义的函数允许其他文件访问、调用,就称为外部函数。C语言规定,不允许有同名的外部函数。 2.内部函数:如果在当前文件中定义的函数不允许其他文件访问、调用,只能在内部使用,就称为内部函数。C语言规定不同的源文件可以有同名的内部...
阅读全文
摘要:一、变量的作用域: 1.局部变量 2.全局变量 二、变量的存储类型 * 变量的存储类型就是指变量存储在什么地方。 有3个地方可以用于存储变量:普通内存、运行时堆栈、硬件寄存器。 变量的存储类型决定了变量何时创建、何时销毁以及它的值能保持多久,也就是决定了变量的生命周期。 * C语言根据变量的存储类型的不同,可以把变量分为:自动变量、静态变量、寄存器变量。 1.自动变量: 1> 定义:自动变量是存储在堆栈中的。 2> 哪些是自动变量:被关键字auto修饰的局部变量都是自动变量,但是极少使用这个关键字,基本上是废的,...
阅读全文
摘要:一、基本概念: 其实我们早就有接触文件包含这个指令了, 就是#include,它可以将一个文件的全部内容拷贝到另一个文件中。 二、一般形式: 1.第1种形式#include :直接到C语言库函数头文件所在的目录中寻找文件 2.第2种形式 #include "文件名" :系统会先在源程序当前目录下寻找,若找不到,再到操作系统的path路径中查找,最后才到C语言库函数头文件所在目录中查找 三、使用注意: 1.#include指令允许嵌套包含,比如a.h包含b.h,b.h包含c.h,但是不允许递归包含,比如 a.h 包含 b.h,b.h 包含 a.h。 2.使用#incl...
阅读全文
摘要:条件编译的概念: 在很多情况下,我们希望程序的其中一部分代码只有在满足一定条件时才进行编译,否则不参与编译(只有参与编译的代码最终才能被执行),这就是条件编译。 一、基本用法: 1 #if 条件1 2 ...code1... 3 #elif 条件2 4 ...code2... 5 #else 6 ...code3... 7 #endif 1> 如果条件1成立,那么编译器就会把#if 与 #elif之间的code1代码编译进去(注意:是编译进去,不是执行,很平时用的if-else是不一样的) ...
阅读全文
摘要:预处理指令简介: 1.C语言在对源程序进行编译之前,会先对一些特殊的预处理指令作解释(比如之前使用的#include文件包含指令),产生一个新的源程序(这个过程称为编译预处理),之后再进行通常的编译 2.为了区分预处理指令和一般的C语句,所有预处理指令都以符号"#"开头,并且结尾不用分号 3.预处理指令可以出现在程序的任何位置,它的作用范围是从它出现的位置到文件尾。习惯上我们尽可能将预处理指令写在源程序开头,这种情况下,它的作用范围就是整个源程序文件 4.C语言提供的预处理指令主要有:宏定义、文件包含、条件编译 宏定义可以分为2种: 不带参数的宏定义 和 带参数的宏定义..
阅读全文
摘要:一、返回指针的函数: 1 // 将字符串str中的小写字母变成大写字母,并返回改变后的字符串 2 // 注意的是:这里的参数要传字符串变量,不能传字符串常量 3 char * upper(char *str) { 4 // 先保留最初的地址。因为等会str指向的位置会变来变去的。 5 char *dest = str; 6 7 // 如果还不是空字符 8 while (*str != '\0') { 9 // 如果是小写字母 10 if (*str...
阅读全文
摘要:用指针遍历字符串的所有字符: 1 // 定义一个指针p 2 char *p; 3 4 // 定义一个数组s存放字符串 5 char s[] = "mj"; 6 7 // 指针p指向字符串的首字符'm' 8 p = s; // 或者 p = &s[0]; 9 10 for (; *p != '\0'; p++) { 11 printf("%c \n", *p); 12 } 用指针直接指向字符串: 1 #include 2 3 int main() 4 { ...
阅读全文
摘要:char类型的变量要占用1字节,所以p+1代表p的值加1;float类型的变量占用4字节,所以p+1代表p的值加4。 从这一点,也可以很好地说明为什么指针一定要分类型,不同类型的指针,p+1的含义是不一样的。 1 // 定义一个int类型的数组 2 int a[4] = {1, 2, 3, 4}; 3 4 // 定义一个int类型的指针,并指向数组的第0个元素 5 int *p = a; 6 7 int i; 8 for (i = 0; i < 4; i++) { 9 // 利用指针运算符*取出数组元素的值 10 int value = *(p+i); /...
阅读全文
摘要:指针:用来存放变量地址的变量,就称为"指针变量"。 "直接引用"是直接通过变量名来读写变量。 "间接引用"首先将变量a的地址存放在另一个变量中,比如存放在变量b中,然后通过变量b来间接引用变量a,间接读写变量a的值。 1 // 定义int类型的变量a 2 int a = 10; 3 4 // 定义一个指针变量p 5 int *p; 6 7 // 将变量a的地址赋值给指针变量p,所以指针变量p指向变量a 8 p = &a; // 定义一个指针变量p // 并将变量a的地址赋值给指针变量p,所以指针变量p指向变量a int *p
阅读全文
摘要:char a[3] = {'m','j','\0'}; char a[3] = "mj"; //系统会自动在字符串尾部加上一个"\0"结束符。: putchar:字符输出函数 putchar(65); //A putchar('A'); //A int a = 65; putchar(a); //A putchar一次只能输出一个字符,而printf可以同时输出多个字符。 getchar:字符输入函数 char c; ...
阅读全文
摘要:变量存储单元的第一个字节的地址就是该变量的地址。 数组名代表着整个数组的地址,也就是数组的起始地址,也是数组第一个元素的地址。 C语言中,编译器是不会对数组下表越界进行检查的,所以自己访问数组元素时要小心。 void test(int b[]) { b[0] = 9; } int main() { int a[3]; a[0] = 10; printf("函数调用前的a[0]:%d\n",a[0]); test(a); printf("函数调用后的a[0]:%d\n",a[0]); return 0; } //...
阅读全文
摘要:逗号运算符和逗号表达式:整个逗号表达式的值是最后一个表达式的值。 int a = 2; int b = 0; int c; int d; c = (++a,a *= 2,b = a * 5); printf("c = %d",c); //输出:c = 30 d = ++a,a *= 2,b = a * 5; printf("d = %d",d); //输出:d = 3 sizeof:可以用来计算一个变量或者一个常量...
阅读全文
摘要:基本数据类型: 整型(int)、浮点型(单精度浮点型(float)、双精度浮点型(double))、字符型(char) 指针类型: void * 构造类型: 数组、结构体(strtuct)、共用体(union)、枚举(enum) 空类型: void类型修饰符: short 短型 取值范围:-32768 ~ 32767 long 长型 取值范围:-2147483648 ~ 2147483647 signed 有符号型 unsigned 无符号型以下写法都是正确的: short int s1 = 1; ...
阅读全文
摘要:一、printf函数: printf("Hello World!\n"); printf("My age is %d\n",26); int age = 17; printf("My age is %d\n",age); %d 或 %i: 带符号 十进制整数。 %o:不带符号 八进制整数。 %x:不带符号十六进制整数。 %u:不带符号 十进制整数。 %c:输出一个字符。 %s:输出一个或多个字符串。 %f:输出小数,默认输出6位小数。 %e:以标准指数形式输出单、双精度数,数...
阅读全文