服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C语言的字符空间与非字符空间你了解吗

C语言的字符空间与非字符空间你了解吗

2021-12-23 14:44宝全哥哥 C/C++

这篇文章主要介绍了C语言的字符空间与非字符空间,本文给大家介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下,希望能给你带来帮助

前言

自学笔记,没有历史知识铺垫(省略百度部分)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之类带有数据类型,通常指的是单独空间而不是连续空间的传递
?
1
2
3
4
5
6
7
8
9
10
11
12
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;
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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语言字符空间与非字符空间

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注服务器之家的更多内容!

原文链接:https://blog.csdn.net/weixin_41832302/article/details/119921254

延伸 · 阅读

精彩推荐