C语言数据结构笔记4:子函数中使用的sizeof 指针无法获取数组的实际大小

在子函数中使用 的sizeof 指针,无法获取数组的实际大小。

C 语言中,当数组作为函数参数传递时,它会退化为指针,导致 sizeof 操作符返回的是指针的大小而非数组的实际大小。

今天记录一下这个小问题。

目录

问题程序:

运行结果与问题解释:

 

问题程序:

 sizeof(Buffer) 返回的是指针的大小,而不是数组的长度。

/**  指针退化问题 * */
#include <stdio.h>
#include <string.h>


void print_buffer_size(unsigned char *buffer) {
    // 这里 sizeof(buffer) 返回的是指针的大小,而不是数组的大小
    printf("Size of buffer (pointer): %zu\n", sizeof(buffer));
}
 
int main() {
    unsigned char test_array[15];
    
    // 在这里,sizeof(test_array) 返回的是整个数组的大小(15字节)
    printf("Size of test_array (actual array): %zu\n", sizeof(test_array));
    
    // 将数组传递给函数时,它会退化为指针
    print_buffer_size(test_array);
    
    return 0;
}

运行结果与问题解释:

发现前后俩次计算结果不同,一个是数组长度15,但另一个则是8了:

  1. 指针与数组的区别
    • 在 C 语言中,数组名在大多数情况下会退化为指向其第一个元素的指针。
    • sizeof 操作符对数组和指针的行为不同:
      • 对于数组,sizeof 返回整个数组的字节大小。
      • 对于指针,sizeof 返回指针本身的大小(通常是 4 或 8 字节,取决于系统架构)。
  2. 代码中的问题
    • Uart_Buffer 在 FuncDeal_send 函数中是一个指针,因此 sizeof(Uart_Buffer) 返回的是指针的大小(在你的环境中可能是 8 字节)。
    • 试图用 sizeof(Uart_Buffer) 来获取缓冲区的长度,这是不正确的。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NULL指向我

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值