C语言的字符空间与非字符空间你了解吗
目录
- 前言
- 一、字符空间与非字符空间概念
- 二、字符空间
- 三、非字符空间
- 四、void * 非字符空间形参化
- 总结
前言
自学笔记,没有历史知识铺垫(省略百度部分)C语言字符空间与非字符空间
一、字符空间与非字符空间概念
字符空间与非字符空间标识
空间首地址结束标识
二、字符空间
首地址:char空间当作字符串来用,通常字符空间操作的函数以str开头,如int strlen(const char *p);结束标识:\0或者0x00
三、非字符空间
首地址:int *p /unsigned char *p /short *p /struct a *p 一般非const char *p都时非字符空间结束标识: 通常函数会提供长度指定的参数int len
四、void * 非字符空间形参化
为了避免参数的长度不一致,导致需要建立多个重复函数处理的问题
func(void * ,size_t len){...}
注意:
遇到void *通常不使用char *p[]开辟空间,可以使用unsigned char *p[] 除非知道该函数参数具体是什么逻辑如果函数形参是int *p之类带有数据类型,通常指的是单独空间而不是连续空间的传递
void func1(void *p, size_t len) { unsigned char *temp = (unsigned char *)p; //41 printf("%X\n", temp[0]); } int main() { char a = 'A'; func1(&a, sizeof(a)); return 0; }
void func1(void *p, size_t len) { //4 循环处理使用 printf("%d\n", len); unsigned char *temp = (unsigned char *)p; //1 printf("%X\n", temp[0]); //2 printf("%X\n", temp[1]); //3 printf("%X\n", temp[2]); //3 printf("%X\n", temp[3]); } int main() { unsigned char a[] = {1,3,5,7}; func1(a, sizeof(a)); return 0; }
总结
本章主要为C语言字符空间与非字符空间
本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注海外IDC网的更多内容!
【文章出处:国外服务器 转发请说明出处】