指针内部的存储形式

1.在程序编译时,会产生一个变量名列表(即变量标识符列表,面向对象程序设计中变量也叫对象包括:我们常说基本类型变量,自定义类类型变量,及它们的常量变量静态变量等,甚至包括字面常量,函数甚至也可以称之为变量(对于定义完的具体函数也会分配到自己的空间,有自己的类型,可以取其地址,所以函数也可以称之为对象,这体现了一切都是对象的思想,但一般我们说变量还是指前几种)。)。这个变量名列表又可称之为变量入口地址列表。每个变量名映射到变量名列表的固定位置。便于以后编译时使用。这些变量又被指定类型,这些类型(如int,string, 类,等存在于程序区,以便定义或初始化变量时使用),变量名列表中值对应的便是变量的地址(变量入口地址)。具体变量的地址中对应的便是变量的值或定义体。同样对于数据类型(数据类型有基本数据类型,自定义数据类型,及对于他们的迭代类型(指针,数组))来说,类型也被存储,对于自定义的类来说,在定义类型名的时候,也会开辟一部分存储空间,存放static变量(函数定义目前不知道是否在这部分空间)等。下面程序可以看出实例一个对象,会占用一部分存储空间,本身类类型也占用一部分存储空间:

#include <iostream>

using namespace std;

class A
{
public:
 int i;
 static int j;
 static int k;
 static void func1() {}
 void func() {}
};

int A::j = 0;
int A::k = 0;
typedef void (*FUNC)();
int main()
{
 A a;
 cout << sizeof(a) << endl;
 cout << sizeof(A) << endl;
 cout << &a << endl;
 cout << &a.i << endl;

 cout << &A::func << endl;
 cout << &A::i << endl;

 cout << &A::j << endl;
 cout << &A::k << endl;
 cout << &A::func1 << endl;
 return 0;
}

2.所以当我们对一个定义的变量使用取地址操作符的时候(&),程序查询变量名列表,将其对应的值(即地址)取出。注:当我们对一个名称只声明,而没有定义时,无法对其取地址。如:

#include<iostream>

using namespace std;

void func();

int main()

{

cout << &func << endl;    //error

cout << func << endl;    //error

}

#include<iostream>

using namespace std;

void func() { };

int main()

{

    cout << &func << endl;    //ok

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值