const和指针一起用

作者: 霡霂976447044 | 来源:发表于2019-02-28 21:06 被阅读0次
  • const char *p
    表示一个字节只读 ,p指向的空间只读,但是p可以指向其他内存。
  • char const *p
    一个字节只读 等价上一个 p 。前面是 *代表是指针变量,const 代表这个指针指向的不能变,char表示指向char类型。
const char *str = "hello world";
  • char * const p
    代表 p指针的指向不能变,但是指向的内存可以变。
  • char *p const
    等价上一个
char * const p = 0x0020000  // p只能指向某个固定的地址 
  • const char * const 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

相关文章

  • const和指针一起用

    const char *p表示一个字节只读 ,p指向的空间只读,但是p可以指向其他内存。 char const *...

  • 5.const与指针

    1.const修饰指针-常量指针 2.const修饰常量-指针常量 3.const修饰指针和常量 代码如下

  • c语言之const和指针

    const和指针 区别方法:如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量...

  • c++ 指针和引用的区别

    1. 指针有const,引用没有const 1)为了限制指针更改指向,引入了const指针(int* const ...

  • C语言-const指针

    const 指针 在普通指针类型前面,加上const修饰 例如: const 指针:区别 加不加const,有什么...

  • C++ decltype 与 auto关键字

    顶层const 与 底层const 指针本身是不是常量 和 指针所指的是不是一个常量 是2个问题。顶层const ...

  • const和指针

    关键字const用来定义常量,如果一个变量被const修饰,那么它的值就不能再被改变。 1. 修饰变量 const...

  • const和指针

  • 指针和const

    const在*后面 int *const p是把指针p变成不可修改 例如 假设p 地址为0x7fffe136a79...

  • const

    const 和 *const 在前,则不能更改对象值,但可以更改指针所指对象;const 在后,则不能更改指针所指...

网友评论

    本文标题:const和指针一起用

    本文链接:https://www.haomeiwen.com/subject/jfmkuqtx.html