C语言C语言&嵌入式

const和指针一起用

2019-02-28  本文已影响0人  霡霂976447044
const char *str = "hello world";
char * const p = 0x0020000  // p只能指向某个固定的地址 

下面有一个小Demo

#include <stdio.h>
int main() {
    const char *p = "hello world!"; // 双引号的数据存放在不可变的内存 所以加上const 当然可加可不加

    char buf[] = {"hello world"}; // helloworld在栈,可变
    buf[0] = 'a';
    printf("buf is %s\n", buf);

    const char buf2[] = {"hello world"}; // helloworld在栈,被const修饰不可变
//    buf2[0] = 'a'; // 直接错误
    printf("buf2 is %s\n", buf2);
}

对于字符串,存储在text区,代码段,可以使用size命令查看可执行文件的text区的信息。
对于buf存储在stack,可读写,对于buf2,修改会在编译时期报错。
c语言中const全局变量存储在只读数据段,编译期最初将其保存在符号表中,第一次使用时为其分配内存,在程序结束时释放。

而const局部变量(局部变量就是在函数中定义的一个const变量,)存储在栈中,代码块结束时释放。
在c语言中可以通过指针对const局部变量进行修改,而不可以对const全局变量进行修改。因为const全局变量是存储在只读数据段

25114105_Xc9r.jpg
c内存分配.png

参考:https://blog.csdn.net/woainilixuhao/article/details/86521357

上一篇 下一篇

猜你喜欢

热点阅读