内存四区之数据区的使用
原创
©著作权归作者所有:来自51CTO博客作者黑马金牌编程的原创作品,请联系作者获取转载授权,否则将追究法律责任
文章目录
内存四区之数据区的使用
数据区:
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;
}