A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zys456465111 中级黑马   /  2014-6-19 07:57  /  799 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 zys456465111 于 2014-6-19 08:47 编辑

发现什么问题了吗?
#include <stdio.h>
#include <STDLIB.H>
#define kMAX 100

typedef struct {
        int ID;
        char * name;
}Student;

void test()
{
        return;
}

//常量区,静态区,堆区,栈区,程序代码区

const int a = 100;
char * b = "ok123";

int main()
{
        Student stu = {10,"张三"};
        int n = 9999;
        int *p = &n;
        int num[10] = {1,2,3,4};
        int *ap=(int*)malloc(100*sizeof(int));//动态分配内存
        static int k = 9;

        printf("常量区\n");
        printf("const int(%p)\n",&a);
        printf("char *(%p)\n",b);
        printf("静态区\n");
        printf("static int (%p)\n",&k);
        printf("堆区\n");
        printf("(int*)malloc(100*sizeof(int))(%p)\n",ap);
        printf("栈区\n");
        printf("struct int(%p),struct char *(%p)\n",&stu.ID,&stu.name);
        printf("int [](%p)\n",num);
        printf("int *(%p)\n",&p);
        printf("int(%p)\n",&n);
        printf("程序代码区\n");
        printf("test()(%p)\n",test);
        printf("未知\n");
        printf("define (%p)\n",kMAX);
        free(ap);

        return 0;
}
运行这段代码我们可以发现:
1、#define在程序运行前已经分配内存单元;
2、如果char *包含在struct中,那么它不会被分配到常量区,也就是说,我们可以继续更改程序中stu.name的值。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马