C의 구조 배열에서 'size of'의 결과는?
C에서, 나는 다음과 같이 정의된 구조들의 배열을 가지고 있습니다:
struct D
{
char *a;
char *b;
char *c;
};
static struct D a[] = {
{
"1a",
"1b",
"1c"
},
{
"2a",
"2b",
"2c"
}
};
배열의 요소 수를 결정하고 싶지만,sizeof(a)
잘못된 결과를 반환합니다. 2가 아니라 48입니다.내가 뭔가 잘못하고 있는 것일까요, 아니면sizeof
여기서 단순히 믿을 수 없는가요?문제가 된다면 GCC 4.4로 컴파일하겠습니다.
sizeof
크기는 요소 수가 아니라 바이트 단위로 제공됩니다.알록이 말했듯이, 요소의 수를 얻으려면 배열의 크기(바이트)를 한 요소의 크기(바이트)로 나눕니다.올바른 관용구는 다음과 같습니다.
sizeof a / sizeof a[0]
sizeof a / sizeof a[0];
이것은 컴파일 시간 상수이므로, 예를 들어 다른 배열을 만드는 데 사용할 수 있습니다.
#define N sizeof a / sizeof a[0]
int n_a[N];
sizeof
전달된 요소의 메모리 크기를 반환합니다.배열의 크기를 단일 요소 크기로 나누면 요소 개수를 얻을 수 있습니다.
요소 크기에는 일부 패딩 바이트도 포함될 수 있습니다.이러한 이유로, 패딩된 구조물(예: 문자 구성원 뒤에 포인터가 있을 때)은sizeof
멤버 크기 합계보다 큰 값입니다.
반면에 배열에서 요소를 셀 때는 다음과 같은 문제가 발생하지 않도록 하십시오.sizeof(a) / sizeof(a[0])
여전히 예상대로 원활하게 작동할 것입니다.
ssize_t portfoy Sayisi = size of (*portfoyler);
효과가 있습니다.
언급URL : https://stackoverflow.com/questions/1898657/result-of-sizeof-on-array-of-structs-in-c
'source' 카테고리의 다른 글
NestedScrollView 내에서 RecyclerView를 사용하는 방법은 무엇입니까? (0) | 2023.09.02 |
---|---|
MariaDB REGEXP_REPLACE 백레퍼런스가 FUNCTION에서 작동하지 않음 (0) | 2023.09.02 |
SQL에 오타가 있다고 하는 오류가 발생하는 이유는 무엇입니까? (0) | 2023.09.02 |
포크를 사용하지 않고 요청을 당기시겠습니까? (0) | 2023.09.02 |
'ToPromise' 속성이 'Observable' 유형에 없습니다. (0) | 2023.09.02 |