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

lengthOfArray对于指针(与数组相反)将无法正常工作,因为sizeof(x)将返回指针的大小而不是指向数组的大小。

您必须将数组的大小显式传递给函数(就像您已经做的那样)。

于 2013-10-02T15:04:08.527 回答
1

您无法仅通过指向它的指针来获取数组的长度。一起使用指针和数组通常不是一个好主意,相反,您应该使用更容易使用的向量。

lengthOfArray(x) 在 main 中为您提供了正确的值,因为它只是数组,而不是指向数组的指针。您可以在此处获取长度,并将其传递到您需要的任何地方。

于 2013-10-02T15:17:29.303 回答