标题:请问复合字面量定义的类似数组的初始化列表是什么
只看楼主
暴君Dentiny
Rank: 2
等 级:论坛游民
帖 子:132
专家分:43
注 册:2019-5-6
结帖率:89.47%
已结贴  问题点数:2 回复次数:10 
请问复合字面量定义的类似数组的初始化列表是什么
这个字面量算是了解了,在谭浩强c程序设计中根本没有这个知识点,在c primer中解释的也不详细,各位师兄有没有自己的看法,可以来评论下
我写的代码
程序代码:
#include<stdio.h>
#define cols 4
int main()
{
    int* pat1;
    pat1 = (int[2]){ 1,2 };
    printf("数组的首值%d\n数组2的值%d", *pat1, *(pat1++ ));
    return 0;
}

但是输出的结果有点不近人意了,本来理想的输出结果是1 2但是结果正好相反
搜索更多相关主题的帖子: 复合 数组 列表 int 结果 
2019-08-24 19:11
TysonKoothra
Rank: 5Rank: 5
等 级:职业侠客
威 望:7
帖 子:71
专家分:374
注 册:2018-10-21
得分:1 
你把这个printf("数组的首值%d\n数组2的值%d", *pat1, *(pat1++ ));
改成 printf("数组的首值%d\n数组2的值%d", *pat1, *(pat1+1 ));
试试程序在你的电脑上,能不能正确输出。
2019-08-24 19:53
TysonKoothra
Rank: 5Rank: 5
等 级:职业侠客
威 望:7
帖 子:71
专家分:374
注 册:2018-10-21
得分:0 
复合字面量定义的类似数组的初始化列表是什么?

数组的初始化是这样的int a[2] = { 1, 2 };
初始化列表就是{ 1, 2 }。
前面加上复合字面量的类型int [2],就构成了复合字面量(int[2]){ 1,2 };
2019-08-24 20:05
暴君Dentiny
Rank: 2
等 级:论坛游民
帖 子:132
专家分:43
注 册:2019-5-6
得分:0 
回复 3楼 TysonKoothra
那怎么用指针调用呢

技术至上,学无止境
2019-08-24 21:59
TysonKoothra
Rank: 5Rank: 5
等 级:职业侠客
威 望:7
帖 子:71
专家分:374
注 册:2018-10-21
得分:0 
回复 4楼 暴君Dentiny
像下面这个例子,因为这个复合字面量是长度为3的数组。就像数组一样使用,就好。
程序代码:
int main(void)
{
    int sum(int *, int);
    int s = sum( (int [3]){1,2,3}, 3);
    printf("s = %d\n", s);
}

int sum(int *p, int n)
{
    int s=0;
    for (int i =0; i < n; i++)
    {
        s+=p[i];
    }
    return s;
}
2019-08-24 22:10
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:1 
printf("数组的首值%d\n数组2的值%d", *pat1, *(pat1++ ));
这句可能有问题,有些编译器可能会输出1、2或者其他。
简化一下看看:
printf("%p\n%p\n", pat1, pat1++);
2019-08-25 05:58
H_M
Rank: 2
等 级:论坛游民
威 望:1
帖 子:23
专家分:60
注 册:2019-2-7
得分:1 
回复 楼主 暴君Dentiny
我知道了,printf的规则问题,从右到左,回想一下i++和++i的问题
你改成
printf("数组的首值%d\n数组2的值%d", *pat1, *(pat1+1));



[此贴子已经被作者于2019-8-25 19:06编辑过]


无思路要敲代码,无思路不敲代码
2019-08-25 19:01
H_M
Rank: 2
等 级:论坛游民
威 望:1
帖 子:23
专家分:60
注 册:2019-2-7
得分:0 
回复 6楼 吹水佬
大佬,看我上面发的帖子[]

无思路要敲代码,无思路不敲代码
2019-08-25 19:02
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:1 
以下是引用H_M在2019-8-25 19:01:31的发言:

printf的规则问题,从右到左


跟 printf 没有关系,任何函数都这样,
“从右到左的压栈顺序”也不是C/C++规定和保证的,
即便是“从右到左的压栈”,也与“参数值评估的顺序”无关。

打开 https://zh.
翻到最后,你可以看到
2) 若一个标量对象上的副效应与另一个使用同一标量对象之值的值计算相对无顺序,则行为未定义。
f(i, i++); // 未定义行为
收到的鲜花
  • lin51616782019-08-26 09:13 送鲜花  10朵   附言:漂亮简洁的介绍
2019-08-25 20:16
H_M
Rank: 2
等 级:论坛游民
威 望:1
帖 子:23
专家分:60
注 册:2019-2-7
得分:0 
回复 9楼 rjsp
认真看了,学到了,我错了。

无思路要敲代码,无思路不敲代码
2019-08-25 21:27



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-496551-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017134 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved