Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 有没有办法初始化没有括号的数组?_Arrays_C_Initialization_Declaration - Fatal编程技术网

Arrays 有没有办法初始化没有括号的数组?

Arrays 有没有办法初始化没有括号的数组?,arrays,c,initialization,declaration,Arrays,C,Initialization,Declaration,我的问题是,是否有任何方法可以初始化一个包含多个无括号元素的数组,例如: inta[5]={1,2,3,4,5} 既然*(a+5)等于a[5],为什么我不能初始化为: int*(a+5)={1,2,3,4,5} 它给了我一个错误:在“+”标记之前应该有“')。这个 int *(a + 5) = {1,2,3,4,5}; just是无效的声明,因为在括号中,表达式(a+5)与名为a的实体一起使用,该实体未声明 例如,如果不使用方括号,您可以编写 typedef int T[5]; T a =

我的问题是,是否有任何方法可以初始化一个包含多个无括号元素的数组,例如:

inta[5]={1,2,3,4,5}

既然
*(a+5)
等于
a[5]
,为什么我不能初始化为:

int*(a+5)={1,2,3,4,5}

它给了我一个错误:在“+”标记之前应该有“')。

这个

int *(a + 5) = {1,2,3,4,5};
just是无效的声明,因为在括号中,表达式
(a+5)
与名为
a
的实体一起使用,该实体未声明

例如,如果不使用方括号,您可以编写

typedef int T[5];

T a = { 1, 2, 3, 4, 5 };
关于你的声明

既然*(a+5)等于a[5],为什么我不能用以下参数初始化:


那么在此上下文中,
*(a+5)
不是数组。如果
a
已声明为元素数不少于
6
的数组,则该表达式将生成元素
a[5]
。否则
a[5]
将是数组中不存在的元素
a

E1[E2]
*(E1+E2)
的等价性仅适用于表达式。您拥有的是一个具有不同语法规则的声明

因此,您需要使用以下语法:

int a[5] = {1,2,3,4,5};
您可以这样尝试:

int *arr=(int*)malloc(5*sizeof(int));
for(int i=0;i<5;i++) {
    scanf("%d",&(*(arr+i)));
}    
or
int *arr=(int*)malloc(5*sizeof(int));
*(arr+0)=1;
*(arr+1)=2;
*(arr+2)=3;
*(arr+3)=4;
*(arr+4)=5;
int*arr=(int*)malloc(5*sizeof(int));

对于(int i=0;i将
a[5]
替换为
*(a+5)
在声明或定义中不起作用

如果你真的想避免方括号(我想是为了赢得赌注),这里有两个扭曲但符合标准的解决方案:

使用三角图:
inta??(5??)={1,2,3,4,5};

使用有向图:
inta={1,2,3,4,5};

有关更多信息,请参阅

您甚至可以编写一个片段,该片段将在禁用三元图且支持有向图的最新编译器上编译:

// trick: the comment spans to the next line if trigraphs are enabled
#define TRIGRAPHS_DISABLED  1 //??/
-1

#if TRIGRAPHS_DISABLED
int a<:5:> = {1,2,3,4,5};
#else
int a??(5??) = {1,2,3,4,5};
#endif
//技巧:如果启用了Trigraph,则注释将跨越到下一行
#定义TRIGRAPHS_DISABLED 1//
-1
#如果TRIGRAPHS\u被禁用
int a={1,2,3,4,5};
#否则
int a??(5??)={1,2,3,4,5};
#恩迪夫

你到底想做什么?这个
[]
声明数组和索引数组是完全不同的。我明白了,谢谢!所以我不能这样做,唯一的方法就是用括号?@AlexandrosGkainta在任何情况下,你都需要用括号来声明数组。@Vladfrommosco:实际上,如果你真的需要避免用括号,有几种方法可以声明arr唉,没有他们:)没有<代码>整数*(iarr+10)={0}是无效的C语法。我从未见过任何类似于
Data\u type*(identifier\u size)的声明在提交答案之前,最好先通过编译器运行要发布的代码。这样做将帮助您避免发布这样的无效代码。谢谢您的建议。现在我在这方面做了一些改变,我尝试了一些不同的方式,请有一个look@AvinashJadhav这仍然不能回答问题。问题是为什么数组不能声明为
int*(a+5)={1,2,3,4,5}