菜单开关

周梦康 发表于 2017-09-26 963 次浏览 标签 : C语言快速入门

免费领取阿里云优惠券 我的直播 - 《PHP 进阶之路》

实验

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char const *argv[]) {
    int a[3];
    char b[3];
    char *c = (char *) malloc(sizeof(char) * 3);
    char *d = "hello world";

    printf("a: %p\n", a); // 栈
    printf("b: %p\n", b); // 栈
    printf("c: %p\n", c); // 堆
    printf("d: %p\n", d); // 只读区(常量区)
    printf("&d: %p\n", &d); // d 是指针,本身的地址是在栈上
    printf("main: %p\n", main); // 代码区

    return 0;
}

输出

a: 0x7fff5e71fa8c
b: 0x7fff5e71fa75
c: 0x7faa8ce00150
d: 0x1014e0f76
&d: 0x7fff5e71fa60
main: 0x1014e0e50

为什么&d是在栈上,而d是在只读区呢?
d里存的是字符串的首地址。具体参考字符串的初始化原理

嗨,老铁,欢迎来到我的博客!

如果觉得我的内容还不错的话,可以关注下我在 segmentfault.com 上的直播。我主要从事 PHP 和 Java 方面的开发,《深入 PHP 内核》作者之一。

[视频直播] PHP 进阶之路 - 亿级 pv 网站架构的技术细节与套路 直播中我将毫无保留的分享我这六年的全部工作经验和踩坑的故事,以及会穿插着一些面试中的 考点难点加分点

评论列表

回复 大头 2017-11-12 21:34:41
为啥 c 在 堆 中