C语言:Ip地址 动归方程式

本文介绍了C语言中的sprintf函数用于格式化输出到字符串,以及atoi函数将字符串转换为整型数。还详细讲解了自定义的my_atoi函数实现相同功能的过程。此外,讨论了内存对齐的概念,并通过示例展示了结构体内存布局。同时,提到了动态内存管理的重要性,包括malloc函数的使用和free函数释放内存。最后,通过一个动态规划问题——打家劫舍,展示了如何利用动态规划求解最优化问题。
摘要由CSDN通过智能技术生成

1.在这里插入图片描述
2.sprintf函数
sprintf() 格式化输出函数(图形)
功能: 函数sprintf()用来作格式化的输出。
用法: 此函数调用方式为intsprintf(char *string,char *format,arg_list);
说 明: 函数sprintf()的用法和printf()函数一样,只是sprintf()函数给出第一个参数string(一般为字符数组),然后再调用 outtextxy()函数将串里的字符显示在屏幕上。arg_list为参数表,可有不定个数。通常在绘图方式下输出数字时可调用sprintf()函 数将所要输出的格式送到第一个参数,然后显示输出。
函数名: sprintf
功 能: 送格式化输出到字符串中
用 法: intsprintf(char *string, char *farmat [,argument,…]);
3.
atoi()函数的功能:将字符串转换成整型数;atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负号才开始做转换,而再遇到非数字或字符串时(’\0’)才结束转化,并将结果返回(返回转换后的整型数)。

/*
* name:xif
* coder:xifan@2010@yahoo.cn
* time:08.20.2012
* file_name:my_atoi.c
* function:int my_atoi(char* pstr)
*/
 
int my_atoi(char* pstr)
{
	int Ret_Integer = 0;
	int Integer_sign = 1;
	
	/*
	* 判断指针是否为空
	*/
	if(pstr == NULL)
	{
		printf("Pointer is NULL\n");
		return 0;
	}
	
	/*
	* 跳过前面的空格字符
	*/
	while(isspace(*pstr) == 0)
	{
		pstr++;
	}
	
	/*
	* 判断正负号
	* 如果是正号,指针指向下一个字符
	* 如果是符号,把符号标记为Integer_sign置-1,然后再把指针指向下一个字符
	*/
	if(*pstr == '-')
	{
		Integer_sign = -1;
	}
	if(*pstr == '-' || *pstr == '+')
	{
		pstr++;
	}
	
	/*
	* 把数字字符串逐个转换成整数,并把最后转换好的整数赋给Ret_Integer
	*/
	while(*pstr >= '0' && *pstr <= '9')
	{
		Ret_Integer = Ret_Integer * 10 + *pstr - '0';
		pstr++;
	}
	Ret_Integer = Integer_sign * Ret_Integer;
	
	return Ret_Integer;
}

4.切片可以切取低位
字符串->整型
整型->字符串
5.结构体对齐问题
以2,4,8倍数的字节块来读写内存,要求各种类型数据按照一定的规则在空间上排列,这就是对齐。时钟周期,对内存进行刷新电路,保证信息存储在里边。

#include<stdio.h>
#include<ctype.h>
#include<assert.h>
#include<limits.h>
#pragma pack(1)//指定按照一字节对齐
struct Node
{
	char ca;
	double dx;
	char cb;
};
int main()
{
	Node x;
	printf("%d \n", sizeof(x));
	return 0;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
不定义变量也可以计算字节个数(偏移量)强转
柔性数组 类运算
5.malloc函数(必须判空)
用free释放空间,释放空间不是销毁空间,而是把空间从已用变为未用。
在这里插入图片描述
6.动态内存管理

#include<stdio.h>
#include<ctype.h>
#include<assert.h>
#include<limits.h>
#include<string.h>
#include<stdlib.h>

int main()
{
	int n = 5;
	int i = 0;
	int* ip = nullptr;
	scanf_s("%d", &n);
	ip = (int*)malloc(sizeof(int) * n);
	if (nullptr == ip)exit(1);
	for (int i = 0; i < n; ++i)
	{
		ip[i] = i;
	}
	for (int i = 0; i < n; ++i)
	{
		printf("%d", ip[i]);
	}//动态内存管理
	free(ip); //空悬指针
	ip = NULL;//没有把指针变为空指针的话,则为失效指针
	return 0;
}

6.动态规划题目:打家劫舍
在这里插入图片描述

#include<stdio.h>
#include<ctype.h>
#include<assert.h>
#include<limits.h>
#include<string.h>
#include<stdlib.h>
int  MAX_INT(int a, int b)
{
	return a > b ? a : b;
}
int rob(int* nums, int n)
{
	if (nums == nullptr || n == 0)  return 0;
	int* dp = (int*)malloc(sizeof(int) * n);
	if (dp == nullptr) return -1;
	for (int i = 0; i < n; ++i) dp[i] = 0;
	if (n == 1) return nums[0];
	if (n == 2) return nums[0] > nums[1] ? nums[0] : nums[1];


	dp[0] = nums[0];
	dp[1] = nums[0] > nums[1] ? nums[0] : nums[1];
	for (int i = 2; i < n; ++i)
	{
		dp[i] = MAX_INT(dp[i - 1], dp[i - 2] + nums[i]);
	}
	int max = dp[n - 1];
	free(dp);
	dp = nullptr;
	return max;
}
int main()
{
	int nums[] = { 2,7,9,3,1 };
	int n = sizeof(nums) / sizeof(nums[0]);
	int maxv = rob(nums, n);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值