*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 个。
分配额外的元素可能看起来效率低下,但比分配不足的大小造成的危害要小。
我有一个关于 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 个。
分配额外的元素可能看起来效率低下,但比分配不足的大小造成的危害要小。