当前位置: 首页 > news >正文

深入理解指针(5)(C语言版)

文章目录

    • 前言
    • 一、`sizeof` 和 `strlen` 的对比
      • 1.1 `sizeof`
        • 示例代码:
        • 输出结果:
        • 注意事项:
      • 1.2 `strlen`
        • 示例代码:
        • 输出结果:
        • 注意事项:
      • 1.3 `sizeof` 和 `strlen` 的对比
        • 典型应用场景:
        • 注意事项:

前言

在C语言中,sizeofstrlen 是两个非常常用的工具,但它们的用途和行为却有很大不同。本文将深入探讨 sizeofstrlen 的区别,并通过示例帮助你更好地理解它们的使用场景。
在这里插入图片描述

一、sizeofstrlen 的对比

1.1 sizeof

sizeof 是一个运算符,用于获取变量或数据类型在内存中占用的字节数。它的结果在编译时就已经确定,因此效率非常高。

示例代码:
#include <stdio.h>

int main() {
    int a;
    char b;
    printf("Size of int: %zu bytes\n", sizeof(a));  // 输出 int 类型的大小
    printf("Size of char: %zu bytes\n", sizeof(b)); // 输出 char 类型的大小
    return 0;
}
输出结果:
Size of int: 4 bytes
Size of char: 1 bytes
注意事项:
  1. sizeof 的结果是 size_t 类型,通常用 %zu 格式化输出。
  2. sizeof 可以直接作用于变量或数据类型,例如 sizeof(int)sizeof(a)

1.2 strlen

strlen 是标准库函数(定义在 <string.h> 中),用于计算以空字符 \0 结尾的字符串的长度。它的结果是在运行时计算的,因此效率相对较低。

示例代码:
#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "Hello, World!";
    printf("Length of string: %zu\n", strlen(str)); // 计算字符串长度
    return 0;
}
输出结果:
Length of string: 13
注意事项:
  1. strlen 仅适用于以 \0 结尾的字符串。
  2. 如果字符串中缺少 \0strlen 可能会导致未定义行为。
  3. strlen 的性能较低,因为它需要逐字节扫描字符串直到遇到 \0

1.3 sizeofstrlen 的对比

特性sizeofstrlen
类型运算符函数
返回值内存占用的字节数字符串的长度(不包括 \0
执行时间编译时确定运行时计算
适用场景计算变量或数据类型的内存大小计算以 \0 结尾的字符串的长度
效率
典型应用场景:
  1. sizeof 的典型使用场景

    • 计算数组的总大小:sizeof(array)
    • 计算数据类型的大小:sizeof(int)
    • 动态分配内存时确定所需空间。
  2. strlen 的典型使用场景

    • 获取字符串的长度(不包括 \0)。
    • 检查字符串是否为空:if (strlen(str) == 0)
注意事项:
  • sizeof 和字符串数组
    如果你有一个字符数组 char str[] = "Hello";sizeof(str) 返回的是数组的总大小(包括 \0),而 strlen(str) 返回的是字符串的长度(不包括 \0)。

    示例:

    char str[] = "Hello";
    printf("sizeof(str): %zu\n", sizeof(str));   // 输出 6(包括 '\0')
    printf("strlen(str): %zu\n", strlen(str));   // 输出 5(不包括 '\0')
    
  • strlen 的性能问题
    strlen 需要逐字节扫描字符串,直到遇到 \0,因此对于非常长的字符串,性能可能会受到影响。如果需要频繁计算字符串长度,建议将结果缓存起来。

总结来说,sizeofstrlen 虽然都可以与字符串相关,但它们的用途和行为完全不同。理解它们的区别,可以帮助你在实际开发中选择更合适的工具。

相关文章:

  • Go 语言规范学习(7)
  • 使用FastAPI和google gemini打造一个多语言翻译网站
  • JWT在线解密/JWT在线解码 - 加菲工具
  • 蓝桥杯专项复习——二分查找、二分答案
  • C++自定义迭代器
  • 【学习笔记】计算机网络(六)
  • [GESP202503 四级] 二阶矩阵
  • 初始ARM
  • 8.3链表专题:LeetCode 143. 重排链表
  • elementui的默认样式修改
  • 常见集合篇(二)数组、ArrayList与链表:原理、源码及业务场景深度解析
  • 【C语言】字符函数的易错点及其模拟实现
  • SQL在线格式化 - 加菲工具
  • WINDOWS 2019 2022 服务器安装了更新补丁 自动重启 分析
  • 第6章 与学习相关的技巧(鱼书)
  • (二)机器学习---常见任务及算法概述
  • 3.31 代码随想录第三十一天打卡
  • 第十章 VGA显示圆
  • # 使用 OpenCV 和神经网络实现图像风格化
  • AISEO中的JSON 如何部署?
  • 自己可以学做网站吗/小红书关键词排名优化
  • 株洲营销型网站建设/白帽seo是什么
  • h5制作微信小程序/页面优化的方法有哪些
  • 文化传媒网站建设/济南seo优化外包服务公司
  • wordpress输密码查看/seo公司seo教程
  • 视频网站点击链接怎么做/视频号推广