1, struct 结构体和union联合体,一定要加‘;’
例:
struct node{
int num
};
,2, 如果使用if和while时,注意:
if(a=4);
{
printf("大家好\n");
}
while(a=4);
{
printf("大家好\n");
}
上面两个语法没问题,但逻辑有问题,if 和while使用时,不要习惯性地加‘;’
注意区分‘=’赋值和‘==’横等的区别
3,有时候可能会出现莫名其秒的段错误,这也是很头疼的;
可能性1:越界:你定义了一个变量char a[10],只有10个字节,如果你给他赋值10个字节以上的内容,系统就会报段错误
可能性2:野指针:你的指针没有初始化,也没明确指向一段内存,那系统会给他一个随机的地址。一旦你使用他,系统就会报错
因为这段地址可能是系统不允许访问的地址
可能性3:链表中:定义一个结构体指针,没有分配空间,那他还是个地址,
例:
struct node *p=NULL;
x = p->num ; //这里就会报错,因为你没分配空间,*p只是一个结构体指针,是个地址,没有内存空间
4,注意while()和for(; ;)里面的控制是,满足条件才循环
n =7 ; for(int i=0;i>10;i++)
while(n<0) {
{
n--;
} }
不要带自己感觉地去写,认为满足条件退出
5,变量在定义时,注意初始化。全局变量,还好,系统会默认为0或NULL。若是局部变量时,不给他赋值,系统自动给一个垃圾值。
6,调用函数时,不要返回局部变量的地址,因为局部变量的资源,在函数调用后,就会释放,所以得不到你想要的结果。
例:
char * reserver_string()
{
char str[] = "hello!";
return str;
}
int main()
{
reserver_string();
return 0;
}
上可以程序,如果你编译,就会出现警告。如果你用一个char *temp;接收返回值,并打印*temp指向的内存,那你得到的将不会是“hello!”
7,文件读写 :文件读写时,*fp会移动,所以要明白指针目前指向