C语言函数中无法获取参数数组的大小

文章讨论了在C语言中如何获取数组的大小,通过strlen()函数适用于字符数组,而sizeof()适用于所有类型数组。然而,在函数中传递数组时,sizeof返回的是指针的大小,不是数组的长度,因此需要将数组长度作为额外参数传递。示例展示了在二分查找函数中如何处理这个问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一般来说,获取数组的大小有两个库函数可以使用:strlen()sizeof()
strlen只能获取字符数组的大小(char)
sizeof可以获取任意类型的数组大小。

但值得注意的是,sizeof返回的数组的占用字节。所以要如下获取数组的长度

int len = sizeof(nums) / sizeof(nums[0]);//nums为定义的数组

但是在函数中,我们无法使用这种方法获得作为参数的数组的长度,一般需要将数组长度作为一个参数写入到函数中去。
如在一个二分查找的函数中

int b_search(int* nums, int len, int target) {
  int left = 0;
  int right = len - 1;//定义首尾位置
  
  while (left<=right) {
    int m = (left + right) / 2;
    if (nums[m] < target) {
      left = m + 1;
    }
    else if (nums[m] > target) {
      right = m-1;
    }
    else {
      return m;//得到索引值
    }
  }
  return -1;//未找到,返回-1
}

参数中会包含一个len,在主函数中得到数组的长度,传入到函数中去进而调用。

int main() {
  int nums[7] = {1, 9, 18, 31, 55, 81, 97};//随便定义一个数组
  int len = sizeof(nums) / sizeof(nums[0]);
  int target_index = b_search(nums, len, 18);
  if (target_index!=-1) {
    printf("目标数据在数组的第%d个位置",target_index );
  } 
  else {
    printf("数组中无目标数据");
  }
}

这是因为我们传入到函数中作为参数的数组,其实是我们定义的nums数组的首位元素的指针。
实际传入到函数 b_search 里的 int *nums,是 nums[0] 的指针
当我们使用 sizeof(nums )时,得到的也只是指针的大小,而并非数组的大小。

对于char形数组参数,可以在函数中用strlen()获得它的长度。char形数组会以 \0 结尾,而对于int形的数组,末端是指针无法找到的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值