C语言强化_day01

一、数据类型探索


 

1,数据类型

数据类型可分为简单类型、结构类型以及指针类型

1,简单类型;分为整形,浮点型,字符型,空类型以及用户自定义类型(枚举)

2,结构类型;分为数组,结构体,联合体以及类(面向对象编程语言引入)

3,指针类型(32位平台下占四个字节)

数据类型是创建变量的摸具,编译器根据类型给变量分配空间(编译器不会为数据类型分配空间,只有根据类型定义变量之后编译器才会为其分配空间)

#include <stdio.h>

int main(void)

{

    int a = 0; //编译器分配4个字节的内存

    int b[10];  //编译器分配4*10 = 40 个字节的内存

 

    //b+1  &b+1的结果不一样

    //是因为 b  &b 所代表的数据类型不一样

    //b  代表数组首元素的地址

 

    //&b 代表整体数组的地址

    printf("b:%p, b+1: %p, &b:%p, &b+1: %p\n", b, b + 1, &b, &b + 1);

    return0;

}

二、内存四区

操作系统将C语言代码分为四个区

  1. 栈区;由编译器自动分配释放,存放局部变量的值,函数的参数值。其生长方向为高地址到低地址
  2. 堆区;由程序员分配释放(C语言中常用malloc和free进行操作,除此之外C语言内存申请库函数还有realloc,calloc等),若程序员不手动释放,则程序结束后由操作系统进行回收。
  3. 数据区;全局区也叫静态区,初始化的全局变量和静态变量放在一块区域,未初始化的全局变量和静态变量放在相邻的另外的一块区域,该区域在程序结束后由操作系统进行释放。                                                                                                           常量区;存放常量,一般为字符常量,程序结束后由操作系统释放
  4. 代码区;存放二进制代码

补充;栈区生长方向与数组相反,堆区与数组生长方向一直(堆从低地址到高地址)

#include <stdlib.h>

#include <string.h>

#include <stdio.h>

char *fun(int num)

{

    char *p1 = NULL;

    p1 = (char*)malloc(sizeof(char*)*num);

    if(p1 == NULL)

    {

        return NULL;

    }

    return p1;//将malloc成功的首地址return给p

}

char *fun1()

{

    char buf[64] = {0};//存放在栈区

    strcpy(buf,"eygfuidh");

    return buf;//返回buf首地址

}

int main()

{

     char *p = NULL;//定义变量时进行初始化

     p = fun(10);

     if(p == NULL)
     {

           return -1;

     }

     strcpy(p,"fydgtfydk");//向p中copy数据

      p = fun1();

    return 0;

 

posted @ 2019-10-03 23:38  rookiezhu  阅读(121)  评论(0)    收藏  举报