天天看点

malloc的基本使用笔记1一.介绍二.sizeof三.动态构造一个一维数组

malloc的基本使用笔记1

  • 一.介绍
    • 代码1 基本使用
  • 二.sizeof
    • 代码1 sizeof
    • 代码2 动态内存分配加sizeof
  • 三.动态构造一个一维数组
    • 代码1

一.介绍

malloc就是memory allocate

1.时间

2.动态内存与静态内存的比较

3.静态内存是在栈分配的。

4.动态内存是程序员手动分配,手动释放,要是不释放,

内存就会越用越少,导致内存泄露。

5.动态内存是在堆分配的,堆排序方式。

6.所谓的分配内存就是软件向操作系统申请一片内存空间的使用权,释放内存就是软件把操作系统申请的那一片内存空间的使用权还给操作系统,里面的值并不会清零,所以申请之后需要初始化。

代码1 基本使用

#include<stdio.h>
#include<malloc.h>
int main(void)
{
	int i = 5;//静态分配4个字节
	int * p = (int *)malloc(4);//分配了一个变量
//在这里p占了4个字节,因为这是32位的。这里总共分配了8个字节。
//p为静态分配的,malloc为动态分配的。

	/*
		1.malloc就一个形参,并且是整型。
		2.那个4就是表示请求系统为我们分配4个字节。
		3.malloc只能返回第一个字节的地址,没什么用,所以要前面那一部分。
		4.(int *)为强制类型转换,告诉我们这个地址是什么类型的地址,
		如分配一百个字节,为(int *)型,那就是有25个变量。
		5.malloc一般用sizeof分配。
	*/
	*p = 10; 
//	free(p);//把p指向的内存给释放掉。
	printf("%d\n", *p);//没有释放就是10,释放了就是随机。
	printf("你好!\n");
	return 0;
}
           

结果:

10
你好!
           

二.sizeof

预备知识:

sizeof(数据类型)

功能:返回值就是该数据类型所占的字节数。

例子:sizeof(char) = 1, sizeof(int) = 4, sizeof(double) = 8

sizeof(变量名)
	功能:返回值就是该变量所占的字节数。
           

假设p指向char类型变量(char本身占1)

假设q指向int类型变量(int本身占4)

假设r指向double类型变量(double本身占8)

以字节为单元编号。

一个变量的地址用这个变量第一个编号地址表示,

这个变量本身类型就可以指出这个变量占几个字节。

代码1 sizeof

#include<stdio.h>
int main(void)
{
	char ch = 'a';
	int s = 66;
	double x = 56.7;

	char * p = &ch;
	int * q = &s;
	double * r = &x;

	printf("%d %d %d\n", sizeof(p), sizeof(q),sizeof(r));
	printf("%d %d %d\n", sizeof(ch), sizeof(s),sizeof(x));

	return 0;
}
           

结果:

4 4 4
1 4 8
           

代码2 动态内存分配加sizeof

#include<stdio.h>
#include<malloc.h>

void f(int * q)
{
	*q = 200;
}

int main(void)
{
	int * p = (int *)malloc(sizeof(int));//sizeof返回的是int所占的字节数。
	*p = 10;
	printf("%d\n", *p);//10
	f(p);
	printf("%d\n", *p);
	return 0;
}
           

结果:

10
200
           

三.动态构造一个一维数组

代码1

#include<stdio.h>
#include<malloc.h>

int main(void)
{
	printf("请输入个数即长度:");
	int len;
	int * p;
	scanf("%d", &len);
	p = (int *)malloc(sizeof(int)*len);//sizeof返回的是int所占的字节数。

	int i;
	for (i = 0; i < len; ++i)//获取输入
		scanf("%d", &p[i]);

	for (i = 0; i < len; ++i)//输出
		printf("%d ", p[i]);
	free(p);
	return 0;

}
           

结果:

请输入个数即长度:5
23 24 25 26 51
23 24 25 26 51
           

后记:正在学习中,如有讲错,请谅解。

继续阅读