A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 桑托尔 于 2014-4-20 19:28 编辑

int SizeOfArray(int a[])
{
        return sizeof(a)/sizeof(int));
}

我自己这样编写的,但是不知道为毛返回值永远是1。
貌似这里面的“sizeof(a)”算的不是整个数组的长度,而算的形参的长度。
于是不知道解决方法了{:3_48:}{:3_48:}
求解答,谢谢!!

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

4 个回复

倒序浏览
你这样写sizeof(a)会计算a的指针长度,而不是数组长度,可以用一下方法计算数组长度
  1. int array_len(int  *s)
  2. {
  3.     int len = 0;
  4.     for (int i=0; (*(s +i))!='\0'; i++) {
  5.         len++;
  6.     }
  7.     return len;
  8. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
你这个计算的是指针的长度,因为当数组当作实参使用的时候,传递的是数组名,相当于指针,永远都是8字节。如果想计算长度,可以将数组内容遍历出来,然后再长度每次递增1,就像楼上所说的。
回复 使用道具 举报
马凯文 发表于 2014-4-20 13:45
这个我尝试了下,没有写出来,最好的情况是输出能正确,但是一旦数组定义为 int array[20] ...就不行了, ...

我还没有学到宏定义,还在结构体阶段。所以宏定义这个还是看不懂:D
回复 使用道具 举报
马凯文 发表于 2014-4-20 13:45
这个我尝试了下,没有写出来,最好的情况是输出能正确,但是一旦数组定义为 int array[20] ...就不行了, ...

#include <stdio.h>

int array_len(char  *s)
{
    int len = 0;
    for (int i=0; (*(s +i))!='\0'; i++) {
        len++;
    }
    return len;
}

int main()
{
        char a[20]="abcdefg";
        int count = array_len(a);
        printf("%d\n",count);
        return 0;
   
}

这个代码能够正确求出字符数组的长度,参考了1楼的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马