C语言-易错题小结
1.用变量a给出下面的定义:
a.一个整型数; int a
b.一个指向整型数的指针; int *a
c.一个指向指针的指针,它指向的指针是指向一个整型数; int **a
d.一个有10个整型数的数组; int a[10]
e.一个有10个指针的数组,该指针是指向一个整型数的; int *a[10]
f.一个指向有10个整型数数组的指针; int (*a)[10]
g.一个指向函数的指针,该函数有一个整型参数并且返回一个整型数;
int (*a)(int)
h.一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并且返回一整型数。 int (*a[10])(int);
2.设置 置位;清除,复位;
a | =(1<<?); 置位 a&=~(1<<?)
3.优先级
( )> [ ] > *
4.段错误的原因(慢慢更新中)
常见原因:
- 空指针引用:当程序试图通过空指针访问内存时,会导致段错误。这通常发生在没有正确初始化指针或者指针指向的对象已经被释放的情况下。
- 数组越界:当程序试图访问数组中超出有效索引范围的元素时,会导致段错误。这可能是由于循环索引错误、数组下标计算错误或者数组长度计算错误等原因引起的。
- 栈溢出:当程序使用递归调用或者大量局部变量导致栈空间不足时,会导致段错误。这通常发生在没有正确终止递归调用或者使用了过多的局部变量的情况下。
- 动态内存错误:当程序使用动态内存分配函数(如malloc、free等)时,如果没有正确管理内存,可能会导致段错误。比如使用已经释放的内存、重复释放内存或者访问已经释放的内存等情况。