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}代码>。