C++ 初始化指向常量数组的指针
我试图避免使用临时变量。但我想不出正确的语法:C++ 初始化指向常量数组的指针,c++,c,C++,C,我试图避免使用临时变量。但我想不出正确的语法: typedef struct { int n; int *ptr; } i_cant_change_this_typedef; i_cant_change_this_typedef foo; i_cant_change_this_typedef bar; int main(void) { foo.n = 123; int tmp[] = {0x01,0x02,0x03}; foo.ptr = tmp; bar.n =
typedef struct {
int n;
int *ptr;
} i_cant_change_this_typedef;
i_cant_change_this_typedef foo;
i_cant_change_this_typedef bar;
int main(void) {
foo.n = 123;
int tmp[] = {0x01,0x02,0x03};
foo.ptr = tmp;
bar.n = 321;
/* can this be done somehow? */
/* bar.ptr = {0x03,0x02,0x01};*/
}
必须生成中间tmp变量,这让我很恼火。
底部的注释行应该显示我正在尝试做什么
这能做到吗?如何做到
啊,是的,我在这里使用的是一个普通的gcc/g++
更新:
我想我应该提到,我更喜欢一个在C和C++中同样有效的解决方案。它将用于嵌入式解决方案中,其中应避免过于复杂的动态分配。您可以创建一个复合文字,并使指针指向该文字:
bar.ptr = (int []){0x03,0x02,0x01};
您可以创建复合文字,并使指针指向:
bar.ptr = (int []){0x03,0x02,0x01};
请仅标记您正在使用的语言。C和C++可能有不同的解决方案。选择一种语言。C的复合文字工作,但对于C++来说可能不太好。值得注意的是,它也是一个gcc扩展,如果有必要的话,也不一定是惯用的@从C99起,它是C标准的官方部分。在GCC文档的第一段中,你链接了。点了,我在延长部分挂起了早期的标准和C++方面。我试着避免临时变量-不用担心。您的编译器优化器将在优化版本中删除它。请仅标记您正在使用的语言。C和C++可能有不同的解决方案。选择一种语言。C的复合文字工作,但对于C++来说可能不太好。值得注意的是,它也是一个gcc扩展,如果有必要的话,也不一定是惯用的@从C99起,它是C标准的官方部分。在GCC文档的第一段中,你链接了。点了,我在延长部分挂起了早期的标准和C++方面。我试着避免临时变量-不用担心。你的编译器优化器将在优化版本中消除它。啊,很好,很简单。不知怎的,类型转换让我有点害怕,我想我已经有太多次陷入了一个陷阱,在那里我阻碍了编译器帮助我。@mogul:这里面的int[]不是类型转换。源文本int[]{0x03,0x02,0x01}是一种复合文字。括号中的类型具有与强制转换相同的语法,但不是强制转换。啊,很好,很简单。不知怎的,类型转换让我有点害怕,我想我已经有太多次陷入了一个陷阱,在那里我阻碍了编译器帮助我。@mogul:这里面的int[]不是类型转换。源文本int[]{0x03,0x02,0x01}是一种复合文字。括号中的类型具有与强制转换相同的语法,但不是强制转换。