c语言编译器
gcc、g++ gcc是用来编译c语言的 g++是用来编译c++的
c语言的数据类型
基本数据类型 char 它的长度是1字节 short 它的长度是2字节 int 它的长度是4字节 long 它的长度是4字节 float 它的长度是4字节 double 它的长度是8字节 非基本类型 结构体 数组 指针
结构体
定义
定义结构体的时候,一般用char数组
数组作为成员属性,元素个数写在后面,写在前面会报错
struct Student { char name[20]; }; Java中是这样写,但是C语言中这样写会报错(高版本的不会报错) struct Student { char[] name; }; struct Student { char name[20]; }; Java中是这样写,但是C语言中这样写会报错 struct Student { char[] name; };
函数定义
定义(与Java一样)
return_type function_name( parameter list ) { body of the function }
声明与定义分开(C++中类的声明与定义分开,与这个原理一样)
return_type function_name( parameter list );
函数的使用
(什么场景需要这样做?比如:一个函数调用在它后面定义的函数就需要这样做。因为C语言编译是按照文件顺序编译并查找符号的。) // 如果没有这句,编译时会报错 int add(); int _tmain(int argc, _TCHAR* argv[]) { add(); return 0; } int add() { return 1 + 2; }
函数参数可以写默认值(与Java不同)
1、如果某个位置有了默认值,这个位置之后的所有值都得有默认参数
2、声明与实现只能一个地方有,不然运行时不知道取哪个值
int add(int a = 10) { return 1 + 2; } ------------------------------------------------- void add(int a, int b = 10, int c) { } ------------------------------------------------- void add(int a, int b = 20); void add(int a, int b = 10) { cout << a + b << endl; }
打印
C语言一般用printf函数,c++一般用cout。但是cout没有printf好用
#include <stdio.h> int main() { printf("ziya\n"); return 0; }
加\n与不加\n有什么区别
printf("%s", stu1.name); printf("%s\n", stu1.name);
格式化参数
%d 十进制有符号整数(常用) %u 十进制无符号整数(常用) %f 浮点数 %s 字符串(常用) %c 单个字符(常用) %p 指针的值(常用) %e 指数形式的浮点数 %x, %X 无符号以十六进制表示的整数(常用,打印指针一般会用到这个) %o 无符号以八进制表示的整数 %g 把输出的值按照%e或者%f类型中输出长度较小的方式输出 %p 输出地址符 %lu 32位无符号整数 %llu 64位无符号整数 可以在“%”和字母之间插进数字表示最大场宽 %3d表示输出3位整型数,不够3位右对齐
字符串
c语言中没有字符串只有char数组 char[] a = "12313\0" 这样定义字符串 c语言会根据0进行结束 如果字符串中读取到了0那就表名字符串读取结束 比如char[] a = "12\0313" 这样只会打印12 后面的都不会打印了
指针的创建
int a = 10; int* p = &a; int *p = &a; int** p = &p;
内存图
指针的长度 32位系统4字节 64位系统8字节
int **** a不管有多少个*长度还是4或者8
指针赋值
int a = 10; int* p = &a; int* pp = (int *)10;
指针的操作符
& 取地址符 * 两个作用:定义指针、解引用