文章目录

内存四区之数据区的使用

数据区:

* 放入是静态变量、全局变量、常量

static和extern(全局)区别:

* static静态变量:编译阶段分配内存,只能在当前文件内使用,只初始化一次
* extern全局变量,C语言下默认的全局变量前都隐藏的加了该关键字

const修饰的变量:全局变量

* 直接修改 失败
* 间接修改 失败 原因放在常量区,受到保护

局部变量

* 直接修改  失败
* 间接修改 成功 原因放在栈
* 伪常量 不可以初始化数组

字符串常量

  • 不同的编译器可能有不同的处理方式
  • ANSI没有指定出标准有些编译器可以修改字符串常量,有些不可以
  • 有些编译器将相同的字符串常量看成同一个

代码示例:

#define
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//1、const修饰的全局变量
const int a = 10;
void test01()
{
//a=100;//直接修改 失败
int *p = &a;
*p = 100;
printf("%的d\n",a);
}
//2、const修饰的局部变量
void test02()
{
const int b = 10;//分配到栈上
//b=00;//直接修改会失败
//间接修改 成功
//C语言下 称为伪常量
int *p = &b;
*p = 100;
printf("b=%d\n",b);
//int a[b];//伪常量是不可以初始化数组
}
//字符串常量
void test03()
{
char *p1 = "hello world";
char *p2 = "hello world";
char *p3 = "hello world";
printf("%d\n",p1);
printf("%d\n", p2);
printf("%d\n", p3);
printf("%d\n", &"hello world");
p1[0] = 'z';//不允许修改字符串常量
printf("%c\n",p1[0]);
}
int main()
{
//test01();
//test02();
test03();
return EXIT_SUCCESS;
}