对于C语言中数组名是指针的理解
2015-11-07 13:00
369 查看
我们都知道,c语言中数组名是一个指针,比如下面这段代码
#include<iostream>
using namespace std;
int main()
{
int a[4]={1,2,3,4};
for(int i=0;i<4;i++)
{
cout<<*(a+i);//*(a+i)和a[i]是等价的。
cout<<endl;
}
return 0;
}
但是看下面这个代码
#include<iostream>
using namespace std;
int main()
{
int a[4]={1,2,3,4};
cout<<"数组长度"<<sizeof(a)<<endl;
int *p;
cout<<"整形指针的长度为:"<<sizeof(p)<<endl;
p=a;
cout<<"指向整形数组后指针的长度为:"<<sizeof(p)<<endl;
return 0;
}
运行结果为:数组的长度为16
整形指针的长度为:4
指向整形数组后指针的长度为:4
*********************************
问题来了:既然数组名a是指针,为什么sizeof(a)和sizeof(p)得到的结果是不一样的呢?是不是说数组名不仅仅是指针呢?
我是这样理解的,数组名就是指针,而且是个常指针,而sizeof一个长指针和一个同类型的指针变量得到的结果是不一样的。
#include<iostream>
using namespace std;
int main()
{
int a[4]={1,2,3,4};
for(int i=0;i<4;i++)
{
cout<<*(a+i);//*(a+i)和a[i]是等价的。
cout<<endl;
}
return 0;
}
但是看下面这个代码
#include<iostream>
using namespace std;
int main()
{
int a[4]={1,2,3,4};
cout<<"数组长度"<<sizeof(a)<<endl;
int *p;
cout<<"整形指针的长度为:"<<sizeof(p)<<endl;
p=a;
cout<<"指向整形数组后指针的长度为:"<<sizeof(p)<<endl;
return 0;
}
运行结果为:数组的长度为16
整形指针的长度为:4
指向整形数组后指针的长度为:4
*********************************
问题来了:既然数组名a是指针,为什么sizeof(a)和sizeof(p)得到的结果是不一样的呢?是不是说数组名不仅仅是指针呢?
我是这样理解的,数组名就是指针,而且是个常指针,而sizeof一个长指针和一个同类型的指针变量得到的结果是不一样的。
相关文章推荐
- 一起talk C栗子吧(第五十九回:C语言实例--字符串概述)
- 简单c语言小游戏实现原理
- C++ Primer 学习笔记_33_STL实践与分析(7) --容器适配器
- 简单工厂模式
- C++中的get,gets,getline
- C++ learning notes - const
- C++基础知识---static const初始化成员变量
- C++基础——对函数模板的类型推导的补充
- C++基础——模板的0初始化
- 排序算法(三):简单选择排序
- 如何两个模板类会相互包含,那么需要在类定义之前声明其中一个类,并且声明时要用模板。
- c++: size_type与 size_t
- C++的机器学习开源库
- C++特征之多态
- 值得学习的C C++语言开源项目
- C++中memcpy和memmove的区别总结
- C/C++ 语法高阶:const应用专题
- C++ char string int 如何转换 合并
- 在C++中使用conio.h 实现实时键盘输入读取 (即不需要回车)
- c++ auto / decltype / std::typeid