微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

* var [n]与* var[n]之差

如何解决* var [n]与* 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个元素。 分配额外的元素可能看起来效率低下,但与分配不足的大小相比,所造成的危害要小。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。