-1

重複
の可能性:sizeof(配列を指すポインター)を見つける方法

で書かれたサンプルコードc

#include<stdio.h>

int main()
{
    char a[]="Visual C++";
    char b[] = "Visual\C++";
    printf("%d, %d\n", sizeof(a), sizeof(b));
    printf("%d, %d", sizeof(*a), sizeof(*b));
    return 0;
}

出力

11,10

1,1

1.)なぜsizeof(a)表示されます11が、文字しかありません10

2.)文字数は同じですが、なぜsizeof(a)、異なる出力を表示するのですか。sizeof(b)

4

6 に答える 6

3

文字列の最後にnull( )があり、単一の文字として解釈されるためです。 \0\C

バックスラッシュをC文字列で表示する場合は、別のバックスラッシュを使用してエスケープする必要があります。

char b[] = "Visual\C++";  \\ 10 characters including the null terminator
char b[] = "Visual\\C++"; \\ 11 characters including the null terminator
于 2012-11-28T18:37:14.283 に答える
0

1-文字列には00バイト(別名nullターミネータ)が含まれているため、sizeofに含まれています

2*aは文字列の最初の文字です-1文字のサイズは1です

于 2012-11-28T18:37:23.573 に答える
0

a10文字に加えて、終了ヌル('\0')文字が含まれます。したがって、サイズは11です。

またab同じ数の文字が含まれていません。ではb、その\C部分はエスケープシーケンスと見なされ、1文字としてカウントされます。を表示する場合は\、を使用します"Visual\\C++"

于 2012-11-28T18:38:08.947 に答える
0

ポイント1:

「VisualC++」の長さ=11/*ヌル文字を含む*/

"Visual \C++"の長さ=10/ *ヌル文字を含み、'\C'は1文字として解釈されます。

ポイント2:

*a最初の文字にアクセスしていることを意味します。

*a<=>a[0]どちらも同じです。

a[0]長さが。の場合は「V」です1

于 2012-11-28T18:45:13.810 に答える
0

キャラクターの観点から見てください:

char a[]="Visual C++";

printf("length = %d\n", strlen(a));
for(int i = 0; i<strlen(a); i++)
    printf("a[%d] = %c (ASCII %d)", i, a[i], a[i]);

このようなコードを使用すると、次のようになります

length = 11
a[0] = V (86)
a[1] = i (105)
a[2] = s (115)
a[3] = u (117)
a[4] = a (97)
a[5] = l (108)
a[6] =   (32)
a[7] = C (67)
a[8] = + (43)
a[9] = + (43)
a[10] =  (0)

これらの値をASCIIテーブルNULLと照合すると、11(ターミネーター)が表示される理由がわかります。

char b[] = "Visual\C++";

2番目の文字列にはエスケープ文字が含まれており、それらのリストは\たくさんありますが、基本的には、次の文字は印刷されないため、特別なものであるため、無視するようにコンパイラに指示します。改行文字のように:'\n'


元の投稿に対するあなたのコメントに基づいて、私は2つの追加事項を明確にする必要があると思います。

追記1:'\n'改行やヌルターミネータ などの特殊文字は、'\0'1バイトの余分なスペースしか必要としません。

追記2: sizeof(a)配列は1バイトしかかからない文字でいっぱいなので、配列のサイズ(文字数)がわかります。より多くのスペースを占める他のタイプでこれを使用する場合は、もう1つの手順を実行する必要があります。

int arr[4] = {0};
int size_of_arr = sizeof(arr/sizeof(int));
于 2012-11-28T18:51:44.713 に答える
0

マクロであるLinuxカーネルでは:

#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
于 2012-11-28T19:02:14.807 に答える