Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.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
C++ 初始化指向常量数组的指针_C++_C - Fatal编程技术网

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}是一种复合文字。括号中的类型具有与强制转换相同的语法,但不是强制转换。