【【萌新的c语言学习-10】】

萌新的c语言学习-10

大小端

//实现大小端判断的方法

int panduan()
{
    int a = 1;
    return *(char*)&a;
}
int main()
{
    int a = 1;
    int ret = panduan();
    if (ret == 1)
    {
        printf("小段");
    }
    else
        printf("大端");
}
//小端

//
//可以用结构体的方法因为我们公用了一个空间
//我在你取完数字之后把这个空间的值重定义会有不一样的效果

int check_sys()
{
    union un
    {
        char c;
        int i;

    } u;
    u.i = 1;
    return u.c;
}
int main()
{
    int ret = check_sys();
    if (1 == ret)
        printf("小端");
    return 0;
}

动态内存的使用

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdlib.h >
#include<stdio.h>
对内存的使用
动态内存分配
我们想要分配多大的空间就多大
malloc free calloc realloc

int main()
{
	//像内存申请10个整型的空间
	int* p =(int*) malloc(10 * sizeof(int));
	//返回的是这个内存空间的地址
	//malloc的返回类型是void* 所以需要我们进行强制类型转化
	int i = 0;
	for (i = 0;i < 10;i++)
	{
		*(p + i) = i;
	}
	for (i = 0;i < 10;i++)
	{
		printf("%d ", *(p + i));
	}

	//用完之后还回去就是free(p);
	free(p);
	p == NULL;//虽然空间被释放了,但是p还是指向这个地址,所以我们把它变成空指针
	//释放掉p

	return 0;
}

当然程序结束之后,这部分空间也会还回去的
calloc 在内存开辟数组空间

#include<string.h>
int main()
{
	//有区别在于malloc(10 * sizeof(int))然而
	int*p=(int*) calloc(10, sizeof(int));
	int i = 0;
	for (i = 0;i < 10;i++)
	{
		printf("%d ", *(p + i));
	}
	//calloc 开辟数组空间后 先全部赋值为0
	//free函数是用来释放动态开辟的空间的
	free(p);
	p = NULL;
	//calloc初始化好了 malloc速度快但是没有先初始化
	return 0;
}

realloc重新开辟空间 调整动态开辟内存的大小
int main()
{
//我们先开辟一块空间

int* p = ((int*)malloc(20));
if (p == NULL)
{
printf(“%s\n”, strerror(errno));
}
else
{
int i = 0;
for (i = 0;i < 5;i++)
{
*(p + i) = i;
}

}
//截止到现在我们正在使用malloc开辟的20个字节
//假设这里的20个字节不能满足我们的使用 我们希望
//可以有40个字节的空间 这里就可以用realloc来调整动态开辟内存
//
//realloc 返回类型void 第一个参数是需要调整的目标寄存器
//size是新的大小

	int*p2=realloc(p, 40);
	int i = 0;
	for (i = 5;i < 10;i++)
	{
		*(p2 + i) = i;
	}
	for (i = 0;i < 10;i++)
	{
		printf("%d ", *(p2 + i));
	}
	return 0;
}

0 1 2 3 4
realloc函数使用的注意事项
如果p指向的空间之后有足够的内存空间可以追加,则直接追加,后返回p
如果P指向的空间之后没有足够的内存空间可以追加,那么realloc会重新找一个新的内存区域
开辟一块满足需求的新的空间,并把原来的数据拷贝过来,释放旧内存空间
最后返回新开辟的内存空间的地址
得用一个新的变量来接受realloc的返回值

常见动态内存的错误
1…

int main()
{
	int* p=(int*)malloc(40);
	//万一 malloc失败了,*p就会被赋值为空指针

}
2.对于动态内存访问不能越界
 3.对非动态开辟空间使用free



//当然程序结束之后,这部分空间也会还回去的
//calloc 在内存开辟数组空间
#include<string.h>

int main()
{
	//有区别在于malloc(10 * sizeof(int))然而
	int*p=(int*) calloc(10, sizeof(int));
	int i = 0;
	for (i = 0;i < 10;i++)
	{
		printf("%d ", *(p + i));
	}
	//calloc 开辟数组空间后 先全部赋值为0
	//free函数是用来释放动态开辟的空间的
free(p);
	p = NULL;
	//calloc初始化好了 malloc速度快但是没有先初始化
	return 0;
}

//realloc重新开辟空间 调整动态开辟内存的大小

int main()
{
我们先开辟一块空间
	int* p = ((int*)malloc(20));
if (p == NULL)
	{
		printf("%s\n", strerror(errno));
	}
	else
	{
		int i = 0;
		for (i = 0;i < 5;i++)
		{
			*(p + i) = i;
		}

	}
//	//截止到现在我们正在使用malloc开辟的20个字节
//	//假设这里的20个字节不能满足我们的使用 我们希望
//	//可以有40个字节的空间 这里就可以用realloc来调整动态开辟内存

//	//realloc 返回类型void 第一个参数是需要调整的目标寄存器
//	//size是新的大小
	int*p2=realloc(p, 40);
	int i = 0;
for (i = 5;i < 10;i++)
	{
		*(p2 + i) = i;
	}
for (i = 0;i < 10;i++)
	{
		printf("%d ", *(p2 + i));
		return 0;
	}
}

// 0 1 2 3 4
// realloc函数使用的注意事项
//如果p指向的空间之后有足够的内存空间可以追加,则直接追加,后返回p
//如果P指向的空间之后没有足够的内存空间可以追加,那么realloc会重新找一个新的内存区域
//开辟一块满足需求的新的空间,并把原来的数据拷贝过来,释放旧内存空间
//最后返回新开辟的内存空间的地址
//得用一个新的变量来接受realloc的返回值

//常见动态内存的错误
// 1..
int main()
{
	int* p=(int*)malloc(40);
	//万一 malloc失败了,*p就会被赋值为空指针

}
//2.对于动态内存访问不能越界
// 3.对非动态开辟空间使用free

//
//

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值