C语言中的堆栈溢出错误是什么?
在 C 语言中,如果程序试图访问超出其可用最大限制的内存,则可能会发生堆栈溢出错误。 例如,如果指针超出堆栈限制(边界),则可能发生堆栈溢出错误。
当堆栈溢出错误发生时,程序终止并且不执行进一步的指令。 因此,在使用指针和限制边界时必须非常小心。
static关键字的作用
C语言中static关键字的常用于三种情况:修饰局部变量,修饰全局变量,修饰函数。
static用于局部变量修饰符:被static修饰的局部变量只能在函数体内被调用。并且静态局部变量的值不会因为函数调用的结束而清除。当函数再次调用时,该变量的值是上次调用结束后的值。静态局部变量被存储在静态存储区(局部变量存放在栈中)。并且静态局部变量会被自动初始化为0。
static用于全局变量修饰符:static修饰的全局变量成为静态全局变量。该变量只能在被当前文件的所有函数访问,不可以被其他文件内的函数访问。
static用于函数修饰符:被static修饰的函数成为静态函数。同样静态函数只能在当前文件中被调用,不能被其他文件调用。
一个32位的机器,该机器的指针是多少位?
指针是多少位只要看地址总线的位数就行了。80386以后的机子都是32的数据总线。所以指针的位数就是4个字节了。
指针和const的用法?const 修饰指针如何区分?
当const修饰指针时,由于const的位置不同,它的修饰对象会有所不同。
1、int *const p2中const修饰p2的值,所以理解为p2的值不可以改变,即p2只能指向固定的一个变量地址,但可以通过*p2读写这个变量的值。顶层指针表示指针本身是一个常量
2、int const *p1或者const int *p1两种情况中const修饰*p1,所以理解为*p1的值不可以改变,即不可以给*p1赋值改变p1指向变量的值,但可以通过给p赋值不同的地址改变这个指针指向。底层指针表示指针所指向的变量是一个常量。
4、int const *const p;p这个指针不可改,指向的值也不可变。
示例:下⾯都是合法的声明,但是含义⼤不同:
const int * p1; //指向整形常量的指针,它指向的值不能修改
int * const p2; //指向整形的常量指针 ,它不能在指向别的变量,但指向(变量)的值可以修改。
const int *const p3; //指向整形常量 的 常量指针 。它既不能再指向别的常量,指向的值也不能修改。
理解这些声明的技巧在于,const是右结合型。查看关键字const右边来确定什么被声明为常量 ,如果该关键字的右边是类型,则值是常量;如果关键字的右边是指针变量,则指针本身是常量。
C++⾥是怎么定义常量的?常量存放在内存的哪个位置?
1.对于局部常量,存放在栈区;
2.对于全局常量,编译期⼀般不分配内存,放在符号表中以提⾼访问效率;
3.字⾯值常量,⽐如字符串,放在常量区。