C/C++教程

C语言 内存布局2

本文主要是介绍C语言 内存布局2,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

执行结果截图:

 可对比如下内存布局:

 代码:

#include "stdio.h"
#include "stdlib.h"
#include "string.h"

// 全局变量a在全局初始化区
int a = 0;
// 全局变量p1在全局未初始化区
char * p1;

int main()
{
    int i;
    // 局部变量b在栈
    int b;
    // 字符串常量abc在常量区,局部变量s在栈
    char s[] = "abc";
    // 局部变量p2在栈
    char * p2 = NULL;
    // 字符串常量123456在常量区,局部变量p3在栈
    char * p3 = "123456";
    // 静态变量c在全局(静态)初始化区
    static int c = 0;
    /* p1是全局变量,在全局未初始化区
     * p2是局部变量,在栈
     * 所申请的10个字节和20个字节的动态内存区域在堆区,
    */
    p1 = (char *)malloc(10 * sizeof(char));
    if (NULL == p1)
    {
        exit(1);
    }

    p2 = (char *)malloc(20 * sizeof(char));
    if (NULL == p2)
    {
        exit(1);
    }

    strcpy(p1, "123456");

    printf("&a: %p\n", &a);
    printf("&b: %p\n", &b);
    printf("&s: %p,  s: %p,  * s: %s\n", &s, s, s);
    printf("&c: %p\n", &c);
    printf("&p2: %p,  p2: %p,  * p2: ",&p2, p2);
    for (i = 0; i < 20; i++)
    {
        printf("%c", p2[i]);
    }
    putchar('\n');

    printf("&p1: %p,  p1: %p,  * p1: ", &p1, p1);
    for (i = 0; i < 10; i++)
    {
        printf("%c", p1[i]);
    }
    putchar('\n');

    printf("&p3: %p,  p3: %p,  * p3: %s\n", &p3, p3, p3);

    free(p1);
    free(p2);

    return 0;
}
这篇关于C语言 内存布局2的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!