给指针分配字面值

7

我知道本网站上有数百万类似的问题,但没有一个指向我难以理解的主题。

我想将整型字面值分配给整型指针,就像这样:

int *p=(int []){7} //casting the literal to array so that it would return the address of first element just like string literal.

但这会导致错误:

带括号的类型后面跟着一个初始化列表是一种非标准的显式类型转换语法。

而在 C 中,这段代码完美地运行。

如果这种类型转换在 C++ 中是不合法的,那么是否有其他方法来实现相同的功能呢?


int x = 7; int* p = &x; 这段代码有什么不符合您的需求的地方吗? - Brian Bi
@noob 它给了我一个运行时错误。(程序进入无响应状态) - parth_07
@Brian,我只是觉得很烦为什么我们不能这样赋值。 - parth_07
1
避免在C++中使用裸指针,这样问题就不会出现了。 - M.M
1个回答

8
语法
int *p=(int []){7};

C99和C11都支持此功能,但C++不支持。

C++11中的选项:

  1. Use a plain old array.

    int p[] = {7};
    
  2. Use a std::array.

    std::array<int, 1> p = {7};
    
  3. Use a std::vector.

    std::vector<int> p(1, 7);
    

1
(int []){7} 是一个复合字面量;它在C99和C11中都被支持。 - Keith Thompson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接