C++中,数组名不是一个简单地指针常量
2014-04-19 12:32
288 查看
#include <iostream>
using namespace std;
int main()
{
int a[2]={1,2};
int*const p=a;
int*const* pp=&p;//合法
// int*const* ppp=&a;//非法
return 0;
}
对于非法部分编译器是这样解释的:
cannot convert from 'int (*)[2]' to 'int *const * '
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
根据提示转换如下:
#include <iostream>
using namespace std;
int main()
{
int a[2]={1,2};
int*const p=a;
int*const* pp=&p;//合法
int* ppp=(int*)&a;//合法
cout<<*ppp<<endl;
return 0;
}
另外如果作如下修改,运行就会出错,如此可以看出,数组名所占用的控件无法访问
#include <iostream>
using namespace std;
int main()
{
int a[2]={1,2};
int*const p=a;
int*const* pp=&p;//合法
int** ppp=(int**)&a;//合法
cout<<**ppp<<endl;
return 0;
}
using namespace std;
int main()
{
int a[2]={1,2};
int*const p=a;
int*const* pp=&p;//合法
// int*const* ppp=&a;//非法
return 0;
}
对于非法部分编译器是这样解释的:
cannot convert from 'int (*)[2]' to 'int *const * '
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
根据提示转换如下:
#include <iostream>
using namespace std;
int main()
{
int a[2]={1,2};
int*const p=a;
int*const* pp=&p;//合法
int* ppp=(int*)&a;//合法
cout<<*ppp<<endl;
return 0;
}
另外如果作如下修改,运行就会出错,如此可以看出,数组名所占用的控件无法访问
#include <iostream>
using namespace std;
int main()
{
int a[2]={1,2};
int*const p=a;
int*const* pp=&p;//合法
int** ppp=(int**)&a;//合法
cout<<**ppp<<endl;
return 0;
}
相关文章推荐
- c++数组名是一个指针常量
- c/c++ 函数、常量、指针和数组的关系梳理
- 区分常量指针和指针常量的一个简单方法
- c/c++ 函数、常量、指针和数组的关系梳理
- 简单总结C++中指针常量与常量指针的区别
- C/C++如何返回一个数组/指针
- C++ 指针,常量,数组,函数,模板,内联等混淆概念
- 汇编语言理解指针(指针就是汇编的间接寻址,其实就是一个简单方便的运算指令,计算完毕直接就赋值,不是从内存中去取值后赋值)
- 数组与指针的艺术 第二章 数组名是一个指针常量吗?
- C++简单例子 分别用 数组 和 指针来输出单个字符
- [C++基础]027_数组和指针是不等价的一个实例
- c/c++ 函数、常量、指针和数组的关系梳理
- 数组名不是指针,那个老师说数组名就是一个指针
- 第二章 数组名是一个指针常量吗?
- 第二章 数组名是一个指针常量吗?
- C++做一个返回数组指针的函数
- 第二章 数组名是一个指针常量吗?
- 一个简单的C++智能指针的实现
- c/c++数组名和指针的区别(数组名可不是简单的指针,误区)
- 说出来你们可能不信,但是数组名确实不是指针常量