static int a[] = {1, 5, 645, 43, 4, 65, 5408, 4, 7, 90, 23, 11};
int len=sizeof(a)/sizeof(int);
ANSI 99와 함께 바로 가기가 있습니까?이 C 코드보다 배열의 길이를 찾는 더 짧은 방법이 있습니까?
static int a[] = {1, 5, 645, 43, 4, 65, 5408, 4, 7, 90, 23, 11};
int len=sizeof(a)/sizeof(int);
ANSI 99와 함께 바로 가기가 있습니까?이 C 코드보다 배열의 길이를 찾는 더 짧은 방법이 있습니까?
나는 바로 가기가 아니라고 생각하지만, 고양이 사용하는 매크로 :
#define arrlen(arr) (sizeof(arr)/sizeof(arr[0]))
+1,하지만 대문자로 작성하여 매크로임을 분명히 할 수 있습니다. –
이 C 코드보다 배열의 길이를 찾을 수있는 짧은 방법이 있나요?
예, 하나 개의 문자 짧은 :
static int a[] = {1, 5, 645, 43, 4, 65, 5408, 4, 7, 90, 23, 11};
int len=sizeof a/sizeof(int);
편집 : @pmg 제안 더 짧은 버전이있다 :
static int a[] = {1, 5, 645, 43, 4, 65, 5408, 4, 7, 90, 23, 11};
int len=sizeof a/sizeof*a;
또한 식별자 len
더 적은 문자를 사용할 수 있습니다 .
:
당신이 원하는 경우
sizeof arr/sizeof *arr
또는
sizeof arr/sizeof arr[0]
그것이수록 짧은에 대한 있습니다
요소 배열의의 수.
arr
이 VLA가 아니면 컴파일 시간에 계산됩니다.
또한 arr
이 어레이 표현 인 경우 포인터가 아닌 경우에만 작동한다는 점도 기억하십시오. 당신이
void foo(int arr[])
{
size_t len = sizeof arr/sizeof *arr;
...
}
뭔가를 할 경우 이러한 맥락에서 arr
가 포인터 표현하지 배열 (온라인 C language standard을 참조하기 때문에 당신은, 당신이 기대하는 답을받지 않습니다 § 6.3.2.1 ¶ 3 및 § 6.5.7.3 ¶ 7).
좋은 질문입니다. 나는 C- 안에있는 것 같다. – mikithskegg
(VLA 제외)'sizeof arr/sizeof * arr'은 컴파일 타임 상수입니다. 왜 다른 방식을 원하니? 매크로 * – pmg
'int len = 12'을 시도해보십시오. ;) – Nim