主 () 内外的字符指针声明
Char pointer declaration inside and outside main()
我编写的程序是:
char* str_1;
void main()
{
char* str_2;
printf("STR_1 Address of pointer : %pn", &str_1);
printf("STR_2 Address of pointer : %pn", &str_2);
printf("STR_1 pointer : %pn", str_1);
printf("STR_2 pointer : %pn", str_2);
}
输出如下:
STR_1 Address of pointer : 00404048
STR_2 Address of pointer : 0028FF1C
STR_1 pointer : 00000000
STR_2 pointer : 7EFDE000
我们该如何解释呢?
默认情况下,
在命名空间范围内定义的变量是值初始化的,这就是str_1
指向 NULL 的原因。
str_2
未初始化,因此该行
printf("STR_2 pointer : %pn", str_2);
实际上是未定义的行为。打印垃圾值。
STR_1 Address of pointer : 00404048
这是静态内存中的一个地址,全局变量被放置在那里。
STR_2 Address of pointer : 0028FF1C
这是堆栈上的地址,自动变量被放置在那里。
STR_1 pointer : 00000000
具有静态存储持续时间(包括全局变量)的变量初始化为零,除非您另行指定。
STR_2 pointer : 7EFDE000
除非另行指定,否则不会初始化自动变量。它们包含创建之前恰好在内存中的任何垃圾。
(严格来说,使用未初始化变量的值做任何事情都是未定义的行为,甚至打印它。
static 是全局变量的默认存储类。
因此,str1 属于全局变量,并自动初始化为 NULL。
"%p"打印一个指针地址。
因此,00000000 而不是 0。
您会对此链接感兴趣:http://www.tutorialspoint.com/ansi_c/c_storage_classes.htm
相关文章:
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 如何循环访问 cpp 中的函数返回的字符指针数组
- 将(N 个字节)无符号字符指针转换为浮点数和双 C++
- 字符指针的 Qt 数组
- C++将常量字符* 指针数组传递给对象
- 为什么不能将字符指针定义为数组?
- 在函数内初始化无符号字符指针将返回空指针
- 将字符指针存储到容器中
- 为什么 strtok_r() 只接受字符数组而不接受字符指针
- 字符指针数组内存分配
- 字符指针不递增?
- 如何在C++中使用字符指针
- 确保字符指针始终指向相同的字符串文字
- C++中的字符指针
- 使用unique_ptr的常量字符指针
- 字符指针不断意外更改
- 将字符指针中的十六进制转换为十进制
- 如何将字符*(字符指针)转换为 PCSZ?
- 在向量中存储字符指针
- 字符指针具有不同的值