代码之家  ›  专栏  ›  技术社区  ›  Aldarme

指针访问数组的大小[重复]

  •  1
  • Aldarme  · 技术社区  · 8 年前

    为此,像往常一样,我将数组的大小除以一个单元格的大小。 当我尝试使用数组时,它是有效的,但是如果我在数组上使用指针,我会发现一个非常奇怪的值。

    请你给我点化一下好吗?

    这里是我的代码:

    int tab1K_I[1000];
    int * tab1k_p = tab1K_I;
    
    int c,v;
    c = sizeof (tab1k_p) / sizeof(*tab1k_p);
    printf("c : %d\r\n", c);
    
    v = sizeof (tab1K_I) / sizeof(tab1K_I[0]);
    printf("v :%d\r\n", v);
    
    c = 2;
    v = 1000;
    
    2 回复  |  直到 8 年前
        1
  •  2
  •   MarkWeston    8 年前
    #define ARRAY_LENGTH(array) (sizeof(array) / sizeof(*array))
    

    仅适用于 阵列 . 在您的代码中, int * tab1k_p ,这是一个 指针

    sizeof(tab1K_I) sizeof(int[1000]) 这就是 sizeof(int) * 1000 ARRAY_LENGTH(tab1K_I) 等于 sizeof(int) .

    sizeof(tab1k_p) sizeof(int *) ,这与 sizeof(int[1000]) ,因此 ARRAY_LENGTH(tab1k_p) sizeof(int *) / sizeof(int) ,这不会产生预期结果。

        2
  •  0
  •   XPD Ederson Garcia    8 年前

    这里,tab1k\u p指针在堆栈上占用8个字节(在64位系统上,sizeof(*int)是8)。tab1K_I从堆栈中获取1000*4(即:1000*sizeof(int))。

    sizeof (tab1k_p) / sizeof(*tab1k_p); 是8/4=2。

    sizeof (tab1K_I) / sizeof(tab1K_I[0]) 为4000/4=1000。