C-数组名称和指向整个数组的指针之间有什么区别?

时间:2018-10-18 21:05:17

标签: c arrays

This website声明数组的名称是指向其第一个元素的指针。很好。

这是我在运行以下代码时的想法:

for(;;) // forever
{
    keypadPress = getKey() ;

    // Process key
    switch( keypadPress )
    {
        case '8' :
        {
            LCD_vPrintChar( '8' );
        }
        break ;

        default :
        {
            // any other key
        }
    }
}

但是,当尝试运行这段代码时,我感觉上一条语句是错误的:

#include <stdio.h>
#define N 3
int main (int argc, char *argv[])
{
    int b[N]={22, 44, 657};

    fprintf(stdout, "[0]: %d\n", *b);

    return 0;
}

如您所见,我现在创建了一个函数#include <stdio.h> #define N 3 void foo(int (*p)[N]) { (void) p; } int main (int argc, char *argv[]) { int b[N]={22, 44, 657}; fprintf(stdout, "[0]: %d\n", *b); foo(&b); return 0; } ,该函数将3个元素组成的数组作为参数,而不是Poiner或另一面的数组。如果b确实是指向数组foo的第一个元素的指针将不起作用,或者至少会得到警告。这段代码向我证明了该网站的声明是AFAIK错误,并且数组名称是指向整个数组的指针,但是... foo(&b);似乎可以正常工作。

有人可以详细说明吗?

0 个答案:

没有答案