-1

重複の可能性:
C sizeof 渡された配列
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 に答える