在函数内部使用字符串常量,编译器会记录这个地址嘛?

2019-12-27 18:50发布

突然有如下这个疑问,不知如何下手,恳请大神指教~~~

  1. void menu_disp()
  2. {
  3.     uint8_t *str = "abc";
  4.     lcd12864_disp_str(2, 0, str);
  5. }
复制代码

按照我的理解,"abc"(首地址)使用1次就被丢弃...我调试时发现,当我反复调用menu_disp()时,,str保存的指针每次都是不变的...

1>编译器每次都重新申请"abc"(首地址),只不过每次申请的"abc"地址相同...

2>编译器发现我多次调用"abc",于是将"abc"(首地址)通过某种方式保存为静态变量(退出函数时仍保存相应的值).

请大神指教,这里到底是采用哪种方式?为什么?谢谢哈...

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
blxy
1楼-- · 2019-12-28 00:37
str为指向字符串“abc”的指针,而字符串“abc”是以常量的形式存在FLASH中的,其地址是固定的,所以每次进入函数时,申请的str都被初始化成同一个值。
vtte
2楼-- · 2019-12-28 03:31
 精彩回答 2  元偷偷看……
落叶知秋
3楼-- · 2019-12-28 09:08
楼上说的都对,注意常量与局部变量的存储区域是不一样的
1a2b3c
4楼-- · 2019-12-28 11:54
其实归根结底是不是可以认为楼主c语言基础知识或者是这种芯片的认知不够呢,哈哈开玩笑的了,这个应该是和const修饰为const char"abc"一样吧?我没有学过c,正好跟着学习一下
XA144F
5楼-- · 2019-12-28 13:46
“编译器每次都重新申请”,单是看到这句话就知道楼主的学的很混乱连基本的都不知道呢,不知楼主有没有打开看过编译生成的bin文件呢?
擦鞋匠
6楼-- · 2019-12-28 14:47
感谢大神指导~~~谢谢~~~

一周热门 更多>