Chinaunix首页 | 论坛 | 博客
  • 博客访问: 44036
  • 博文数量: 11
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 126
  • 用 户 组: 普通用户
  • 注册时间: 2012-11-11 23:27
文章分类

全部博文(11)

文章存档

2014年(2)

2013年(9)

我的朋友

分类: C/C++

2013-11-22 23:45:00

变量地址、指针和引用

一、数据变量和内存        

    当在程序中声明变量时,系统会自动在随机访问存储器(RAM)中为该变量预留出一块空间,其大小根据变量的数据类型决定。下表列出了ISO C++标准所支持的数据类型、所需的存储空间以及数据表示范围。
关键字                                所需存储空间(字节)                           数据表示范围
char                                            1                                                 -128 ~ 127
unsigned char                               1                                                 0 ~ 255
signed char                                  1                                                 -128 ~ 127
int                                               4                                                -2 147 483 648 ~ 2 147 483 647
short int                                       2                                                 -32 768 ~ 32 767
unsigned short int                          2                                                 0 ~ 65 535
unsigned int                                  4                                                 0 ~ 4 294 967 295
long int                                        4                                                 -2 147 483 648 ~ 2 147 483 647
unsigned long int                           4                                                 0 ~ 4 294 967 295     
float                                             4                                                 6个有效数字,如 0.xxxxxx (在visual C++中是7个有效数字)
double                                          8                                                10个有效数字,如0.xxxxxxxxxx(在visual C++中是15个有效数字
long double                                   10                                              10个有效数字,如0.xxxxxxxxxx(在visual C++中是19个有效数字
    

二、sizeof运算符

    C++提供了一个sizeof运算符,该运算符返回存储某个数据类型或变量所需的字节数,用法如下:
        sizeof variable_name;        //处理变量,可以用括号,为了简便通常省去
        sizeof (date_type);            //处理数据类型,必须带括号        

三、计算机内存和十六进制

    计算机将数据以“位”的方式进行存储,也就是通常所说的0和1,8位为1个字节。
    计算机内存采用十六进制表示法(hexadecimal notation)编址。为了更方便的处理计算机中的位序列,计算机专家采用了十六进制表示法(hex)来按照字节对位序列进行处理。该表示法可以很方便地对位数据进行解释并对计算机内存进行编址。当对指针的值进行输出时,得到的就是一个十六进制数据。通俗的说,就是用十六进制数据表示数据在内存中的存储地址。
    在十六进制表示法中共有16个数字符号:0到9,以及A,B,C,D,E,F。十六进制数据以0x开始。
    

四、 其地址操作符&

    其地址操作符&:返回内存中存储给定变量的十六进制地址。
    使用方法:&
variable_name

五、指针

    指针(pointer) 也是C++中的一种数据类型,它可以存储一个十六进制的地址。指针用来存储程序中变量的地址。当一个指针含有一个变量的地址时,我们就说该指针“指向”这个变量。
    指针    存储其他变量十六进制地址的变量。

    指针没有像int、float等这样的关键字,但它有自己特殊的声明语句。程序和指针都需要知道所有指向的数据是什么类型的。因此,在声明一个指针时,我们要给出该指针变量所指向的数据类型。声明指针变量需要使用星号(*),格式如下:
    date_type *variable_name;
    C++不会自动为指针进行赋值,具体的赋值操作需要自己来完成,可以用取地址操作符&来实现这一操作。

    使用指针进行函数的引用调用    将某一变量的地址赋给函数中的一个指针变量。
    间接运算符*    当和指针一起使用时,该运算符会把程序指向指针变量所存储的地址处。

    下面的例子通过指针来进行函数的调用,将main函数中的变量显示的传给指针。利用间接运算符和指针来完成对main函数中变量的赋值。

点击(此处)折叠或打开

  1. #include<iostream>
  2. #include<string>
  3. using namespace std;

  4. //函数声明
  5. void askForInfo(string *pName, int *pAge, int *pNumPets);
  6. void writeInfo(string name, int age, int numbers);

  7. int main()
  8. {
  9.     string name;
  10.     int age, numPerts;

  11.     //使用取地址运算符,将变量地址传给函数
  12.     askForInfo(&name, &age, &numPerts);

  13.     //这里不需要使用指针,将变量的地址传给函数
  14.     writeInfo(name, age, numPerts);

  15.     return 0;
  16. }

  17. void askForInfo(string *pName, int *pAge, int *pNumPets)
  18. {
  19.     cout << "\n Please enter your name: " << endl;
  20.     getline(cin, *pName);
  21.     cout << "Please enter you age: " << endl;
  22.     cin >> *pAge ;
  23.     cout << "Please enter the num of perts: " << endl;
  24.     cin >> *pNumPets;
  25.     cin.ignore();
  26. }

  27. void writeInfo(string name, int age, int numPerts)
  28. {
  29.     cout << "\n Hi " << name << "!\n I see that you are " << age << "years old abd have " << numPerts << "perts.";
  30. }

//程序结果如下所示:
 Please enter your name:
aa
Please enter you age:
20
Please enter the num of perts:
10

 Hi aa!
 I see that you are 20years old abd have 10perts.请按任意键继续. . .


六,引用参数

        
    在使用引用进行函数的引用调用中,函数的原型以及其头部声明中都包含引用参数,这里使用&而不是*,这里的&称为“引用”。而在调用函数的语句中只需要给出变量名就可以了,不需要注明&运算符。

    使用引用进行函数的引用调用    把某一变量的地址赋给函数中的引用变量。
    引用参数    使用运算符&声明的参数,实际上是一个指针。        

     在使用这种引用调用机制中,我们向函数传递的是地址,而函数则通过该地址来访问调用它的函数的数据。虽然使用引用参数进行函数的引用调用时向函数传递的参数是地址,但我们不需要使用间接运算符来实现对数据的访问。
        
    引用参数在函数声明时需要使用引用运算符“&”。实际上,引用参数会告诉程序:“这其实是个地址,就把它当做地址来处理好了。而且既然我们都知道这一点,就不再使用地址或间接运算符了。”
    在使用引用进行的引用调用中,函数的调用语句中只包含变量的名称,而实际上传递的却是变量的地址。


阅读(1025) | 评论(0) | 转发(0) |
1

上一篇:vector类

下一篇:queue类

给主人留下些什么吧!~~