gpt4 book ai didi

c++ - 指向 const 指针(或指向 const 的指针)

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:23:09 24 4
gpt4 key购买 nike

我有这个代码:

#include <iostream>

int main(){

int v1 = 20;

int *p1 = &v1;
int **p2 = &p1;

return 0;
}

我想在这里做的是将一个指针指向另一个指针,在这种情况下它工作正常。

我将 p1 设为 const 指针或指向 const 的指针:

int *const p1 = &v1; OR
const int *p1 = &v1;

现在我的代码不起作用。考虑第一种情况。 int *const p1 = &v1;。这是我更新后的代码,我认为应该是正确的:

#include <iostream>

int main(){

int v1 = 20;

int *const p1 = &v1;
const int **p2 = &p1;

return 0;
}

使指针本身成为const 意味着它不能指向另一个对象,但是它指向的那个对象的值可以改变。因此,如果我想将另一个指针指向前一个指针 p1,我需要确保不能使用第二个指针来更改 p1 的值,所以我做到了(p2) 指向const 的指针。但它不起作用。

错误::从“int* const*”到“const int**”的无效转换 [-fpermissive]

同样,第二种情况也失败了。我认为应该正确的代码:

#include <iostream>

int main(){

int v1 = 20;

const int *p1 = &v1;
int **p2 = &p1;

return 0;
}

使指针指向 const 意味着指针不能用于更改它指向的对象的值。然而,指针可以改变它自己的值,也就是说它可以指向其他对象。由于我可以更改指针的值,因此第二个指针不必指向常量。

错误:从“const int**”到“int**”的无效转换 [-fpermissive]

我正在使用 GNU CC 编译器我是 C++ 的新手,我迷路了。我想知道如何将指针指向与 const 相关的其他指针。

最佳答案

您的第一次重写没有成功,因为您试图将常量指针的地址分配给指向指针的指针,其中最终“指针”(即 int)是常量,而不是比中间的指针。换句话说,如果 C 允许这个

int *const p1 = &v1;
const int **p2 = &p1; // Not allowed

它应该允许这样做:

*p2 = &v2; // This would be legal.

但是,这会修改指针 p1,据称它是常量。

为了使第一次重写工作,您需要更改以下内容:

int *const p1 = &v1;
int * const *p2 = &p1;

注意 const 是如何从声明之前移动到星号之间的。现在您正在创建一个指向 int 常量指针的指针。

你的第二次重写失败了,因为它完全放弃了 const-ness。要修复它,请将 const 放回声明的开头:

const int *p1 = &v1;
const int **p2 = &p1;

关于c++ - 指向 const 指针(或指向 const 的指针),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27202698/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com