学习C :为什么这是非法的

Learning C++: why is this illegal?

本文关键字:非法 为什么 学习      更新时间:2023-10-16

我几天前买了C 底漆书,我开始学习这种新语言!

目前,我正在尝试解开为什么我写过的这个障碍是非法的:

i初始化const int至512;我将const int const指向n初始化;但是,它不允许我创建指向指针的const int const指针,即使使用double **和所有内容:

const signed int n = 512;
const signed int *const nPointer = & n;
const signed int **const nPointer2 = & nPointer;

有人有简单的解释吗?感谢您的时间!

为了修复代码,您有两个选项:

//Option one : 
const signed int *const nPointer = & n;
const signed int *const *const nPointer2 = & nPointer;
//Option two :
const signed int * nPointer = & n;
const signed int **const nPointer2 = & nPointer;

说明:

当NPOINTE是t的恒定指针时,NPOInter2应像第一个选项一样指向t的恒定指针。另外,当npointer2是指向t的非const指针的指针时,Pointee NPointer也应该是非const。

当您到达定义自己的类型别名的书籍的一部分时,您可以删除混乱,以查看这些替代方案的工作原理:

//simplifying notation:
using myType = const signed int *;
using myTypeC = const signed int * const;
//your code equivalent to:
myTypeC nPointer = & n;
myType *const nPointer2 = & nPointer;
//Option One:    
myTypeC nPointer = & n;
myTypeC *const nPointer2 = & nPointer;
//Option Two:    
myType nPointer = & n;
myType *const nPointer2 = & nPointer;

首先简化了问题并删除签名。问题保持不变其次,使用编译器并读取错误消息。这对所有语言都是有效的,不仅是C 问题在这里:

const int **const nPointer2 = & nPointer;

npointer类型是const签名的int* const

您的说明是

const signed int **const nPointer2 = & nPointer;

因此,您会收到以下消息:

错误:从'const int*const*'到'const int **'

的无效转换

如您所见,const在您的两颗星之间。创建编译错误。

如您所见,

使用&put *在 end