---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
打算用三篇日志总结c语言的知识,今天是第二篇。总结可能有些不到位,我的习惯是写在本子上,然后再敲到电脑上。一般是我觉得不好掌握或者易忘的知识点。望见谅!
一、进制(java中也学习过,总结些我需要加强记忆的):
- 二进制以0b或0B开头,八进制以0开头,十六进制以0x或0X开头
- %x输出十六进制整数。%0输出八进制整数
- 变量在内存中的存储:int a=12;二进制为1100.内存存放由下向上,第一字节的地址就是变量的地址。
代码:int number = 12; int number2 = 13;0000 1100 内存地址 0000 0000 小 0000 0000 ^|0000 0000 大 - 以下写法:.98 √ -.003 √ 98f ×—> 98.0f、98.0F √ 10e8.7 ×—> 相当于10乘以十的几次方,e后面的数值必须是整数
- 进制转换:二进制——>十进制:0b1100 = 0*2的0次方+0*2的1次方+1*2的二次方+1*2的三次方。其他进制转换与此相同。
- n位二进制的取值范围是0~(2的n次方-1)。int第一位是符号位,因此int取值范围是-2的31次方~2的31次方-1
- 类型修饰符:short、long、signed、unsigned。long int = 8l;或者long int = 8;在64位编译器中,将int扩充为8个字节,long long int 也是8个字节。在16为编译器中int为2字节,long int 为4个字节,long long int为8个字节。输出为%ld、%lld。 signed为有符号,unsigned为无符号,unsigned int的取值范围为0~2的32次方-1。输出unsigned用%u
- 位运算符:&、|、^、<<、>>、~ ^异或:9^5^5==9; 5^5==0;9^0==9; ~取反:相同为1,不同为0; <<左移:移几位相当于乘以2的几次方(符号位可能改变); >>右移:符号不变,移几位相当于除以2的n次方。
- 面试题:不使用第三方变量互换变量值 a=a^b;b=a^b;a=a^b;
char类型:字符在内存中实际上是ASCII码值
printf("%d",'A'); ——> 输出字符A的ASCII码值
printf("%c",65); ——> 输出65对应的字符
二、数组:
- 正确写法 int ages[5] = {10,20,21,13,23};int ages[5] ={10,19};int ages[] ={[3]=10,[4]=11};int ages[] ={12,15};int ages[3]; ages[0]=2;... 未赋值为0
- 错误写法 int ages[4];ages={23,12,43,53} 只能在定义同时进行初始化。
- 在定义时初始化元素个数必须是常量。
- 数组在内存中的存储,内部寻址是从上到下
- 数组当做函数参数传递时,会当做指针变量使用,指针变量在64位编译器环境下,占8个字节,所以数组元素个数不能在函数中计算,要传递进来
- 二维数组,int ages[2][3]。两个数组,每个数组中有三个元素
三、字符串:
- C语言中用字符数组存储字符串。"jack" == 'j' + 'a' + 'c' + 'k' + '\0'; char name[10]="jack";printf(name);有警告,printf默认接收字符串常量,不过可以编译通过
- 字符串正确写法:char name[8]="it";char name[8]={'i','t','\0'};char name[8]={'i','t',0};(\0的ASCII码值是0)char name[8]={'i','t'};
- 字符串错误写法:char name[]={'i','t'};这是字符数组,不是字符串
- 字符串输出%s
-
strlen函数:计算字符串长度
1.计算的是字符数,并不是字数。一个汉字算作3个字符
2.计算的字符不包括\0
3.从某个地址开始数字符的个数,直到遇到\0为止
4.strlen函数声明在string.h文件中
四、指针
- 指针定义格式:变量类型 *变量名。指针变量只能存储地址。如:int a=10;int *p; p=&a; *p=5;printf("%d",a);输出结果是5!
- int *p中的*与*p不同。int *p可看做整体,仅仅是标志。*p才是为指向存储空间的指针。
- 任何指针都占有8个字节。sizeof返回unsigned long,%zd输出unsigned long。
- 指向数组的指针。int ages[5]={12,32,11,44,33}; int *p; p=&ages; 指针指向ages中第0个元素。p+1 指针指向第一个元素。*(p+1)取出ages[1]的值。还有一种访问方式和数组一样p[1],是访问数组第一个元素
- 字符串与指针:char name[]="it";name[0]='T'; 存于栈区,可改。char *name="it"; *name='T'; 运行崩溃,存于常量区,不可修改。定义字符串两种方式:① char name[]="it";变量 ②char *name="it"; 常量
- 指向函数的指针:定义的一般形式:函数的返回值类型 (*指针变量名)(形参1, 形参2, ...);函数名就代表着函数的地址
五、结构体
- 结构体的定义:
struct 结构体名 { 类型1 变量名1; 类型2 变量名2; ...... 类型n 变量名n; };
-
定义一个结构体变量,方式有好多种
①先定义结构体类型,再定义变量
struct Student { char *name; int age; }; struct Student stu;
②定义结构体类型的同时定义变量struct Student { char *name; int age; } stu;
③直接定义结构体类型变量,省略类型名struct { char *name; int age; } stu;
- 结构体的使用:
①引用的一般形式为:结构体变量名.成员名
②结构体数组:结构体数组也有3种定义方式
struct Student { char *name; int age; }; struct Student stu[5]; //定义1 struct Student { char *name; int age; } stu[5]; //定义2 struct { char *name; int age; } stu[5]; //定义3 // 初始化 struct { char *name; int age; } stu[2] = { {"MJ", 27}, {"JJ", 30} };
六、枚举
- 枚举的定义:enum 枚举名 {枚举元素1,枚举元素2,……};
enum Season {spring, summer, autumn, winter};
- 枚举变量的定义:有3种方式定义枚举变量
enum Season {spring, summer, autumn, winter}; enum Season s;
enum Season {spring, summer, autumn, winter} s;
enum {spring, summer, autumn, winter} s;
-
枚举使用的注意
①C语言编译器会将枚举元素(spring、summer等)作为整型常量处理,称为枚举常量。②枚举元素的值取决于定义时各枚举元素排列的先后顺序。默认情况下,第一个枚举元素的值为0,第二个为1,依次顺序加1。
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------详细请查看:www.itheima.com