黑马程序员技术交流社区

标题: c语言 想定义一个关于计算数组长度的函数... [打印本页]

作者: 桑托尔    时间: 2014-4-20 09:24
标题: c语言 想定义一个关于计算数组长度的函数...
本帖最后由 桑托尔 于 2014-4-20 19:28 编辑

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

我自己这样编写的,但是不知道为毛返回值永远是1。
貌似这里面的“sizeof(a)”算的不是整个数组的长度,而算的形参的长度。
于是不知道解决方法了{:3_48:}{:3_48:}
求解答,谢谢!!
作者: 微尘•逐梦    时间: 2014-4-20 10:22
你这样写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. }
复制代码

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

我还没有学到宏定义,还在结构体阶段。所以宏定义这个还是看不懂:D
作者: 星河鹭起    时间: 2014-4-20 14:08
马凯文 发表于 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楼的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2