防止重复包含和嵌套包含
#pragma once
让C代码,可以在C++编译器编译运行
#ifdef __cplusplus 两个下划线
extern "C"{
#endif
XXXXX
#ifdef __cplusplus
}
#endif
int*,其中int=4Byte,表示其步长
通过指针做函数参数,实参前加&取地址符,间接赋值。用于赋值多个变量;单一变量时直接用函数返回值+赋值即可
同级别指针赋值,a=b,a指向b指向的地址
不指定数组大小,写几个字符元素,数组就多大,后面也没有\0
指定数组大小,没用到的字符元素都被赋值为0
'\0'等价于0,不等于'0'
一般情况,不指定数组大小,后方用" ",而不是{' ',' '}
数组名是一个地址常量,确保最终内存可以被回收
编程习惯:1.若形参中有指针,判断其是否为NULL
2.函数执行成功返回0,执行失败返回非0
3.不要在子函数中直接使用形参,而是尽量使用辅助变量将其接过来。(胡乱移动形参会找不到“头”)
将指针赋初值为空,意思是它不指向任何内存空间
system("pause"); 在控制台程序一闪而过时的解决办法
除了注释,也可以用条件编译,屏蔽一段代码
#if 0
#endif
(const char *p <—> char const *p。都是const修饰*p,指针指向的内存不能改变)
const char* p,指针指向的内存不能改变
char* const p(const修饰p),指针的指向不能改变
const char* const p,两者都不能改变
如何引用另外文件的中的变量?extern声明之后,就可以用了
值传递与地址传递:地址传递形参可以改变实参,而值传递却不行
二维数组的数组名,代表首行地址(第一行一维数组的地址),其步长为30
定义二维数组,不写第一个中括号,(a[][30]={“xx”,"xx};),必须要初始化(即后面接大括号)
首行地址和首元素地址的区别,他们的步长不同。首行地址的步长是第二个中括号的值,首元素地址的步长是1(char类型)
指针数组和二维数组的区别,是否拷贝。指针数组没拷贝,二维数组拷贝了
用子函数给主函数分配空间
直接分配空间,需要高一级指针
通过返回值分配空间,值传递,给形参开辟空间后,将形参返回值赋值给主函数中的实参
scanf读;printf写
s-printf;f-printf
考虑边界情况,即思考某参数等于0时会发生什么
if (i==0)
{
return -2;
}