字符空间和非字符空间

前言

对于嵌入式驱动开发人员而言,由于更多的时候都是在与底层打交道,所以需要掌握更多与内存操作相关的知识。本文,我们通过(void*)的形参方式,对C语言中的字符空间非字符空间的参数传递进行学习。
在本文中,无论是字符空间还是非字符空间,指的都是内存中连续空间的概念,比如:数组、结构体,而不是针对单个参数传递的情况。
而对于连续空间而言,在使用函数进行处理时,往往使用地址传递的方式进行处理,不仅可以提升程序的执行效率,而且还可以减少内存资源的消耗。

单个参数的传递

在嵌入式领域中,对于单个数据的传递,往往使用数据类型的方式进行参数传递:

传递一个整型的数据:int
传递一个整型数据的地址:int*
传递一个字符型数据的地址:char*

字符空间

而对于字符空间而言(我们可以简单认为是字符串),往往使用如下方式进行参数传递:

对于可变的字符空间:char*
对于不可变的字符空间:const char*

在处理字符空间,由于字符串是以\0最为结束标志,所以需要在函数体中对字符空间的结束进行处理,如下:

int funTest(char* temp)
{
	unsigned int i = 0;
	while(NULL != temp[i])
	{
		temp[i] = i;
		i++;
	}
}

非字符空间

对于非字符空间而言,往往使用如下方式进行参数传递:

对于可变的非字符空间:void*
对于不可变的非字符空间:const void*

在处理非字符空间时,需要指定非字符空间的大小,如下:

int funTest(unsigned char* temp,unsigned int length)
{
	unsigned int i = 0;
	for(i = 0;i < length;i++)
	{
		temp[i] = i;
	}
}

你可能感兴趣的:(嵌入式开发笔记,C语言笔记)