C语言笔记-11-函数空间-字符空间与非字符空间

"本文介绍了C语言中字符空间和非字符空间的概念,字符空间主要用于字符串操作,以`str`开头的函数如`strlen()`,结束标识为``。非字符空间包括各种数据类型的指针,结束标识通常由函数参数提供。此外,`void*`用于形参化处理,避免因长度不一致导致的函数重复。示例代码展示了如何使用`void*`处理不同数据类型的指针。"
摘要由CSDN通过智能技术生成

C语言笔记-11-函数空间-字符空间与非字符空间



前言

自学笔记,没有历史知识铺垫(省略百度部分)C语言字符空间与非字符空间


一、字符空间与非字符空间概念

字符空间与非字符空间标识

  1. 空间首地址
  2. 结束标识

二、字符空间

  1. 首地址:char空间当作字符串来用,通常字符空间操作的函数以str开头,如int strlen(const char *p);
  2. 结束标识:\0或者0x00

三、非字符空间

  1. 首地址:int *p /unsigned char *p /short *p /struct a *p 一般非const char *p都时非字符空间
  2. 结束标识: 通常函数会提供长度指定的参数int len

四、void * 非字符空间形参化

为了避免参数的长度不一致,导致需要建立多个重复函数处理的问题
func(void * ,size_t len){...}

注意:

  1. 遇到void *通常不使用char *p[]开辟空间,可以使用unsigned char *p[] 除非知道该函数参数具体是什么逻辑
  2. 如果函数形参是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; 与下方等价,右侧可省略(unsigned char *)
    unsigned char *temp = p;
    //1
    printf("%X\n", temp[0]);
    //3
    printf("%X\n", temp[1]);
    //5
    printf("%X\n", temp[2]);
    //7
    printf("%X\n", temp[3]);
}
int main()
{
    unsigned char a[] = {1,3,5,7};
    func1(a, sizeof(a));
    return 0;
}

总结

本章主要为C语言字符空间与非字符空间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值