2
#define lengthOfArray(x)  (sizeof(x) / sizeof(x[0]))

main() では正しい答えが得られるようですが、array_set() の printf() では正しい答えが得られます。私は何か見落としてますか?

int* decValue2[BUF_SIZE] = {
  0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 
  0x99, 0x00, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff
};

#define lengthOfArray(x)  (sizeof(x) / sizeof(x[0]))


void array_set(int* y_dest, int* y_src, int arrayLength){ // arrays
     int i = 0;

     printf("lengthOfArray in function: %d \n", lengthOfArray(y_src));  
     // [TODO] check that y_dest has enough space
     for (i=0;i<arrayLength; i++)
         y_dest[i] = y_src[i];
    // 
}


// In main()

    int y_int = 0;
    int y_array[BUF_SIZE];

    int_set_right( &y_int, 9876543);
    array_set(y_array, decValue2, BUF_SIZE);

    printf("lengthOfArray: %d \n", lengthOfArray(y_array));  

    printf("Value int :: %d \n",y_int);
         int i = 0;
     for (i=0;i<BUF_SIZE; i++) 
         printf("%x ", (0xff & y_array[i]));    
4

2 に答える 2

4

lengthOfArraysizeof(x)ポインタのサイズではなくポインタのサイズを返すため、(配列とは対照的に) ポインタに対しては正しく機能しません。

配列のサイズを関数に明示的に渡す必要があります (既に行っているように)。

于 2013-10-02T15:04:08.527 に答える
1

配列へのポインタだけでは配列の長さを取得できません。通常、ポインターと配列を一緒に使用することはお勧めできません。代わりに、より簡単に操作できるベクターを使用する必要があります。

lengthOfArray(x) は、配列へのポインターではなく単なる配列であるため、main で正しい値を提供します。ここで長さを取得し、必要な場所に渡すことができます。

于 2013-10-02T15:17:29.303 に答える