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

浙公网安备 33010602011771号