sizeof(*ap)は、sizeof(arr[0]);配列のタイプが であるintことを意味します。システム構成では、サイズが であるため、結果は になります。sizeof(int)int44
の値を出力して自分で試すことができます。*pの値が得られますarr[0]。
をポインタint *pにして、int arr[10]
その点に注意してください:
Arraysポインタは同等ではありません。
sizeofoperator はコンパイル時の演算子です。
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);
}