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;
指针的操作符
& 取地址符
* 两个作用:定义指针、解引用