学习C :为什么这是非法的
Learning C++: why is this illegal?
我几天前买了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 。
相关文章:
- 为什么基于范围类型的大括号上循环init列表是非法的c++
- 为什么代码会抛出非法内存访问错误
- 为什么派生类的这个定义是非法的
- 为什么是非法的:将指针向量复制到指向常量的指针向量中
- 学习C :为什么这是非法的
- 为什么使用构造函数调用表示法定义指向指针变量的指针是非法的
- C++ 为什么反转路径是非法的
- 为什么Folloing代码在2010年Visual Studio(X64应用程序)中抛出非法指令例外
- 为什么vector<int * const>是非法/不合逻辑的?
- 继承 - 为什么这是非法的
- C++:为什么构造"A(A a) {}"是非法的?
- 为什么 如果类的成员是引用,则复制对象是非法的
- 在下面的代码上下文中,为什么"cout << c"是合法的,而"c = "x"是非法的?
- 为什么double v2=((double)51/4)%2是非法表达式ni c++
- 为什么int&r = 0是非法的,而const int&r = 0是合法的?
- 如果C++向后兼容C,那么为什么在C++中void main是非法的
- 为什么这个c++赋值语句是非法的
- 为什么带逗号的双重初始化是非法的?
- 为什么编译器说"非法使用浮点"?
- 为什么非模板化函数具有相同的名称和参数但不同的返回类型是非法的?(但对模板函数合法吗?)