sizeof(*ap)
は、sizeof(arr[0]);
配列のタイプが であるint
ことを意味します。システム構成では、サイズが であるため、結果は になります。sizeof(int)
int
4
4
の値を出力して自分で試すことができます。*p
の値が得られますarr[0]
。
をポインタint *p
にして、int arr[10]
その点に注意してください:
Arrays
ポインタは同等ではありません。
sizeof
operator はコンパイル時の演算子です。
sizeof(arr)
、評価すると10*sizeof(int)
、それは10*4=40
あなたの場合です。
- p を逆参照する (p が指す値を取得する) と、配列全体が得られるわけではありませんが、配列の 1 つの単位がそうである
int
ことを*p
意味しarr[0]
ます。sizeof(arr[0])
明らかな4(あなたの場合)です。
- を使用する
sizeof(p)
と、マシンのポインターのサイズが得られます。私のマシンでは8です。
main
関数の戻り値の型はint
常にする必要があります。オペレーティング システムにプログラムの終了ステータスを報告する必要があります。使用するvoid
と、ランダムなガベージが返される場合があります。
例は問題を示します:
#include<stdio.h>
#include<stdlib.h>
int main(){
int *p=NULL;
int arr[10]={10,1,2,3,5,6,7,8,9,10};
p=arr;
printf("values: arr[0]=%d *p= %d\n\n",arr[0],*p);
printf("sizes : sizeof(arr[0])=%lu, sizeof(*p)= %lu sizeof(int)=%lu\n\n",sizeof(arr[0]),sizeof(*p),sizeof(int));
printf("Sizeof pointer p: %lu \n\n",sizeof(p));
printf("Sizeof arr: %lu \n\n",sizeof(arr));
printf("Pointing p to the first byte of 100 byte sequence\n\n");
p=malloc(100);
printf("Though p is pointing 100 byte block, sizeof(p)=%lu",sizeof(p));
return 0;
}
基本的に、sizeof
評価しますが、 it が指すものは評価しsizeof type
ません。sizeof type
ありがとう、私はあなたの知識に感謝しますが、別の関数内の配列のサイズを見つける方法はありますか(私が配列を定義するものではありません)。
あなたは私の私見ではできません!配列とともにサイズを渡す必要があります。
例:
int main(){
int arr[10]={10,1,2,3,4,5};
printf("Length of array: %lu",findLength(arr,sizeof(arr)));
return 0;
}
size_t findLength(int *p,int size){
return size/sizeof(*p);
}