素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: twitter: @javascripter にどうぞ。

sizeof、メモ

配列のサイズの取得 - 素人がプログラミングを勉強するブログを書いた後に、配列のサイズを取得する部分を関数にしたらうまくいかなかったので、原因とかをメモ。

#include <stdio.h>

int size(int *arr){
	return sizeof arr / sizeof arr[0];
}

int main(){
	int arr[] = {0,1,2,3,4,5};
	printf("arr size: %d\n",sizeof arr / sizeof arr[0]); // 6
	printf("arr size: %d\n",size(arr)); // 1
	return 0;
}

id:qnighy曰く、sizeof演算子は変数に対して使うもので、int *arrで得られたものは同じアドレスを参照しているが変数としては別物なので、結果が異なる。

どうにかならないのと聞いたら「C++vector使えよ」ということで、まあ、そういうことなんだと思う。