数组名的含义、指针含义
来源:互联网 发布:淘宝淘金币首页 编辑:程序博客网 时间:2024/06/09 20:11
数组名的含义
int a[2]={1,2};
cout<<&a<<endl;
cout<<a<<endl;
cout<<&a[0]<<endl;
cout<<*a<<endl;
cout<<sizeof(a)<<endl;
0012F0C8
0012F0C8
0012F0C8
1
8
由此可见, 数组名a的值、&a、&a[0]的值相同,而a[0]为数组的第一个元素。
我们可以推断: 编译器没有为数组名分配空间,但编译器对数组名做了特殊处理
即是, 数组名 为数组首地址,
而且 &数组名 也是代表的数组首地址。
int a[4]={1,2,3,4};
int (*p)[4];
p=a; // 这种赋值是错误的
p=&a; // 这种赋值是正确的,原因p是数组指针 所以应将数组的地址赋值给p
// 就如同p若为整形指针,则应将整形的地址赋值给p
// 虽然在实际中,数组名与&数组名 都是同一个值,但是编译器在逻辑上仍然将a视为数组,将&a视为取数组的地址
// 所以数组指针=&数组名 即p=&a;
又如程序:
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
int (*p)[4];
for(p=&a[0];p<&a[0]+3;p++)
cout<<&p<<endl;
cout<<endl;
for(p=&a[0];p<&a[0]+3;p++)
cout<<p<<endl;
cout<<endl;
for(p=&a[0];p<&a[0]+3;p++)
cout<<*p<<endl;
cout<<endl;
for(p=&a[0];p<&a[0]+3;p++)
cout<<**p<<endl;
输出:
0012F0CC // &p
0012F0CC
0012F0CC
0012F09C / /p
0012F0AC
0012F0BC
0012F09C //*p
0012F0AC
0012F0BC
1 //**p
5
9
指针含义
指针 是一个变量,占用4字节, 用以保存地址。
指针的SIZE是固定的,是4字节,但是指针指向的那块内存区域的大小取决于指针的类型。
Int *p ; 指向的内存区域以4字节为一个单元进行操作
Char *p; 指向的内存区域为以1字节为一个单元进行操作
Char (*p)[5]; 指向的内存区域为以5个字节为一个单元进行操作
Class B:public A
{
}
A *p =new B(); 指针指向的内存区域为生产的B对象中继承自A的那部分空间
- 数组名的含义、指针含义
- 数组名的含义
- 深入理解:指针数组,数组指针,指向指针的指针,数组名含义
- C++ 直接cout指针名的含义?
- 二维数组名含义
- C/C++中数组名的含义
- C/C++中数组名的含义
- C中数组名的含义
- 对数组名含义的理解
- 一个例子解释“数组名"的含义
- 数组指针加1操作的含义
- 一维数组,二维数组,三维数组名的含义
- 一维数组,二维数组,三维数组名的含义
- 指针++的含义
- 指针+1的含义
- delete指针的含义
- 指针比较的含义
- OXFeeeFeee指针的含义
- CSDN社区运营午餐会第17期–炎炎夏日,请人吃饭不如请人游泳
- 输出2.0-1.1的结果
- [转载]IOS开发之----远程推送通知
- 静态成员变量
- Strus2学习笔记-02
- 数组名的含义、指针含义
- 学习java程序加载
- ZOJ 3492 Kagome Kagome
- 路由器与交换机概念还是有区别滴
- 两个hadoop的问题解决
- 2012华为校园招聘机试(武汉)
- Java Date
- JQuery 跟着鼠标走的Div
- struts2全注解配置步骤