指向整数数组和正常整数数组的指针

dou*_*leE 5 c arrays types pointers kr-c

在KR C book 112页中,它说:

int (*arr1)[10];
Run Code Online (Sandbox Code Playgroud)

是一个指向10个整数数组的指针.我不知道上面和下面有什么区别:

int arr2[10];
Run Code Online (Sandbox Code Playgroud)

1- arr2本身不是指向10个整数数组的指针吗?(因为数组的名称本身就是指针.)

2-如果数组的名称是阵列地址和指针数组,则两个arr1arr2是指向整数数组,是不是这样的吗?

gsa*_*ras 5

arr2本身不是指向10个整数数组的指针吗?

不,这是一个阵列.

数组的名称不是数组的地址和指向该数组的指针吗?

数组名称可以转换为指向其第0个元素(而不是整个数组)的指针.

所以arr1和arr2都是指向整数数组的指针?

没有.

  1. arr1 是一个指向10个整数数组的指针.
  2. arr2是一个10个整数的数组.在大多数上下文中,它转换为指向整数的指针(不是指向数组的指针).

例如,检查这个错误的示例:

#include <stdio.h>

int main(void)
{
    int arr2[10] = {0};
    arr2[5] = 747;

    int (*arr1)[10] = {0};
    arr1[5] = 747;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在这里,我标本兼治arr1,并arr2为"同样的事情",我得到这个错误:

C02QT2UBFVH6-lm:~ gsamaras$ gcc -Wall main.c 
main.c:9:13: error: array type 'int [10]' is not assignable
    arr1[5] = 747;
    ~~~~~~~ ^
1 error generated.
Run Code Online (Sandbox Code Playgroud)

但如果我这样做:

arr1[0][5] = 747;
Run Code Online (Sandbox Code Playgroud)

它将通过编译!同样的,(*arr1)[5] = 747;当然.