15.数据类型
1.防止头文件重复包含
#pragma once
2.VS
兼容C++编译器,如果是C++编译器,按C标准编译;
#ifdef __cplusplus //内部定义宏
extern "C"
{
#endif
#ifdef __cplusplus
ertern "C"
}
#endif
3.如果数组作为函数参数,数组形参会退化为指针;
4.数据类型
5.void无类型
(1).函数为空,定义函数时,可以用void修饰;
(2).函数没有返回值;
(3).不能定义void类型普通变量,无法确定类型,不同类型分配空间不一样;
(4).可以定义void *变量:void *p; //32位永远4字节,64位永远8字节;
(5).数据类型本质:固定内存块大小的别名;
(6).void *p万能指针,函数返回值,函数参数;
6.内存四区模型
(1).全局区
(2).堆区
(3).栈区
7.间接赋值
(1).值传递,形参的任何修改不会影响到实参;
(2).地址传递,形参的(通过*操作符)的任何修改会影响到实参;
用1级指针形参,去间接修改了0级指针(实参)的值。
用2级指针形参,去间接修改了1级指针(实参)的值。
用3级指针形参,去间接修改了2级指针(实参)的值。
级指针形参,去间接修改了(n-1)级指针(实参)的值。
8..c文件->可执行程序
9.二维数组
char a[4][30]:
4个a[30]的一维数组,二维数组;
定义二维数组,不写第一个[],必须先初始化;
a代表首行地址(加1步长加一行,下一行的首地址)和首元素(加1加一个元素的大小)地址有区别;
char b[30]; printf("&b:%d,%b+1:%d\n",&b,&b+1);//首行地址 printf("b:%d,b+1:%d\n",b,b+1);//首元素地址