【问题标题】:difference of *var[n] with (*var)[n]*var[n] 与 (*var)[n] 的区别
【发布时间】:2020-11-09 11:53:03
【问题描述】:

我对@9​​87654321@ 和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;
}

【问题讨论】:

    标签: c pointers syntax


    【解决方案1】:
    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 个。 分配额外的元素可能看起来效率低下,但比分配不足的大小造成的危害要小。

    【讨论】:

    • 非常感谢,这又一次理清了我的概念,指针和动态内存真的在搅动我的大脑。
    猜你喜欢
    • 1970-01-01
    • 2018-08-02
    • 2013-06-28
    • 2021-05-07
    • 2011-09-04
    • 2020-11-06
    • 1970-01-01
    • 2020-10-26
    • 1970-01-01
    相关资源
    最近更新 更多