C语言函数 数组作为参数,在函数里中无法计算传进来的数组长度求指教。

1、数组做参数,完全无法按值传递。这是由C/C++函数的实现机制决定的。
2、传数组给一个函数,数组类型自动转换指针类型,因而实际传的是地址
下面三种函数声明完全等同:
void func(int array[10])
void func(int array[])
void func(int *array)

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>
int printArr(int *);

int main()
{
    // 产生随机数种子
    time_t tms;
    int a[5]; // 数组的创建
    srand((unsigned int )time(&tms)); /* 注意:z这里传的是地址 */

    //初始化数组
    for (int i = 0; i < 5; i++)
    {
        a[i] = rand() % 100 + 100;    /* 产生100--200的随机数 */
    }

    // 输出数组
    int printArr(int *a);
    getchar();
    return 0;
}
// 专门打印数组的函数
int printArr(int *a)
{
    printf("the size is %d", sizeof(a));
    return 0;
}

问:
打印数组a的长度总是4而不是20?
答:
整型数组作为参数传递时,无法在子函数中获得其长度!只有字符串可以,因为它有一个尾巴标识(‘\0’)!
所以,整型的数组长度,必须与数组名一同传递到子函数才可以!
追问:
char b[15] = {'a', 'b', 'c', 'e', 'a', 'a', 'b', 'c', 'e', '\0'}; 这个好像也不可以,求完整的解决方案。
追答:
你这个也有结束符啊,如果你能规定一个特殊数值作为整数的结束符,则传整型数组也能做到。

转载于:https://my.oschina.net/wangsifangyuan/blog/634137

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值