嵌入式C基础知识(6)

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.字⾯值常量,⽐如字符串,放在常量区。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaoyi9812

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值