-1

可能重复:
C sizeof a passed array
为什么 sizeof(param_array) 是指针的大小?

我是 C 新手,对类型系统有点困惑。我正在尝试编写一些代码来打印字符串中小写字符的数量,但是我的数组中只有一个 int 大小的片段被传递给 cntlower 函数。为什么是这样?

#include "lecture2.h"

int main(void){
    int lowerAns;
    char toCount[] = "sdipjsdfzmzp";
    printf("toCount size %i\n", sizeof(toCount));
    lowerAns = cntlower(toCount);
    printf("answer %i\n", lowerAns);
}

int cntlower(char str[]) {

    int lowers = 0;
    int i = 0;
    printf("str size %i\n", sizeof(str));
    printf("char size %i\n", sizeof(char));

    for(i = 0; i < (sizeof(str)/sizeof(char)); i++) {
         if(str[i] >= 'a' && str[i] <= 'z') {
               lowers++;
         }
    }

    return lowers;

}

实际上,当前的输出是: toCount size 13 str size 4 char size 1 answer 4

我相信这对你们中的一些人来说是显而易见的,但不幸的是,它不适合我!

4

1 回答 1

2

函数的char str[]参数实际上是 a 的语法糖char*,所以sizeof(str) == sizeof(char*)。这恰好与sizeof(int)您的平台一致。

于 2012-11-06T22:22:14.507 回答