*var[n] 与 (*var)[n] 的区别

difference of *var[n] with (*var)[n]

我有一个关于 char *<variable>[6]char (*<variable>)[6] 之间的区别的问题。 我正在为一个练习编写代码,该练习要求输入和存储 6 个字符串,然后将每个字符串转换为一个整数。我的计划是制作一个字符串数组来存储它们,我做了 char *<variable>[6] = malloc(7*sizeof(char)); 但是出现了一个错误,说“数组初始化程序必须是一个初始化程序列表”但是当我将它更改为 char (*<variable>)[6] = malloc(7*sizeof(char)); 它可以正常工作. (*<variable>)[6]*<variable>[6] 有什么区别?

我的代码如下:

#include <stdio.h>
#include <stdlib.h>

int main(void){
    char (*sixString)m[6] = (char *) malloc(7 * sizeof(char));
    int i;
    int sum = 0;
    for(i = 0; i < 6; i++){
        printf("Input for the Number %d: ", i + 1);
        scanf("%s", sixString[i]);
        //fgets(sixString[i], 100, stdin);
        printf("%s\n", sixString[i]);
        sum = sum + atoi(sixString[i]);
    }
    float average = (float)sum/6 ;
    printf("Sum is: %d\nAverage is: %.2f\n", sum, average);

    free(sixString);
    return 0;
}
char *<variable>[6]

char*的6元素数组。

char (*<variable>)[6]

是指向 char 的 6 元素数组的指针。

您的代码分配的字节数不足。你应该使用

    char (*sixString)[6] = malloc(7 * sizeof(char[6]));

    char (*sixString)[6] = malloc(7 * sizeof(*sixString));

而不是

    char (*sixString)m[6] = (char *) malloc(7 * sizeof(char));

(大小固定,去掉多余的m

请注意,您分配了 char[6] 的 7 个元素,但在循环中只使用了其中的 6 个。 分配额外的元素可能看起来效率低下,但比分配不足的大小造成的危害要小。