如何使用指针确定C中的sizeof数组?

shu*_*rok 0 c arrays pointers

我有一个数组,其中包含指向其他数组的指针.我想打印所有值,但我无法获得特定数组的sizeof.我究竟做错了什么?

int main(void){
    int i, j;
    float T1[4]={1.1, 1.2, 1.3, 1.4};
    float T2[6]={2.1, 2.2, 2.3, 2.4, 2.5, 2.6};
    float T3[3]={3.1, 3.2, 3.3};
    float T4[2]={4.1, 4.2};
    float T5[4]={5.1, 5.2, 5.3, 5.4};

    float *TAB[5]={T1, T2, T3, T4, T5};
    for(i=0; i<5; i++){
        for(j=0; j<sizeof(TAB[i])/(sizeof (int)); j++){
            printf("%f ", *(TAB[i]+j));
        }
    }
    printf("\n");
}
Run Code Online (Sandbox Code Playgroud)

Som*_*ude 7

你不能.一旦数组衰减到指针,您就不再拥有有关数组大小的信息.你需要以其他方式跟踪它.

在您显示代码的情况下,您可以拥有第二个数组TAB_SIZES,其中包含指向的数组的大小TAB.


还要记住,对于任何数组或指针p和索引i,表达式p[i]都等于*(p + i).这意味着你不必这样做*(TAB[i]+j).相反TAB[i][j],这对大多数人来说更"自然".