C++编程基础一 16-指针

 1 // 16-指针.cpp: 定义控制台应用程序的入口点。
 2 //
 3 
 4 #include "stdafx.h"
 5 #include <iostream>
 6 #include <climits>
 7 
 8 using namespace std;
 9 
10 int main()
11 {
12 
13     int a = 10; //定义变量后,系统默认会给变量分配一个地址。
14     float b = 9.7f; //将double数据存储在float类型中有可能会遇到数据太大存不下报错。写成9.7f。
15     int c = 20;
16     //怎么取得变量的内存地址呢?
17     //&取得一个变量的内存地址
18     cout << &a << endl; //取得a变量的内存地址。
19     cout << &b << endl;
20     //*从内存地址所对应的内存处取得数据。
21     cout << *(&a) << endl;
22 
23     //取地址的时候用&加上变量,取数据时用*加上地址。
24     //对于一个变量(数据)来说在内存中有两个东西,一个是它的内存地址,一个是它的值。
25 
26     //指针用来存地址的,分不同的类型,因为不同类型所占的内存空间不同。
27     int* pa = &a;//定义一个int类型的指针,并存储a的地址。
28     float* pb = &b;//定义一个float类型的指针,并存储b的地址。
29     cout << pa << endl;
30     cout << pb << endl;
31 
32     //通过指针访问数据。
33     cout <<*pa << endl;
34     cout <<*pa << endl;
35 
36     int* p;
37     p = pa; //将pa的地址给p。
38     cout << *p << endl;
39     cout << *pa << endl;
40 
41     *pa = 100;//将pa地址的值改成100;pa地址对应变量a,看下a中的值是否已经修改!
42     cout << a <<" "<<*pa<<endl; //都是100
43     
44     *p = 300;
45     cout << a << "  " << *pa << "  " << *p << endl;//前面p=pa,将p和pa的地址等效了。感觉和变量的赋值是有区别的。
46 
47     //更新后的C++指针必须要初始化的。可以先给个空。
48     int* p1 = 0; //表示指向空。
49     int* p2 = NULL;//表示指向空。
50     int* p3 = nullptr;//C++11中使用的指向空的方式,推荐使用。
51     cout << p1 << "  " << p2 << endl;
52 
53     //空类型的指针。
54     void * q; //q可以接收任意类型的地址。
55     q =&a; //虽然&a的值是int类型,但是将a的地址给q后,q还是任意类型的指针。这里和auto不是一个概念。
56     //q = &b
57     //cout << *q << endl; //错误写法,由于q是任意类型的指针,系统不知道需要多大的地址,所以无法输出q指针
58     //需要先进行类型转换
59     cout << *((int*)q) <<endl; //(int*)是将任意类型的p指针转换成int类型的指针,再 *((int*)p)得到指针对用的值。
60 
61     //————————通过new申请内存和 通过delete释放内存————————
62 
63     //int* s = nullptr; //定义并初始化一个int类型的指针。
64     int* s = new int; //定义一个int类型的指针并自己开辟一个int类型的内存空间。
65     *s = 100; //给指针s对应的地址的值赋值100
66     cout << *s << endl; //由于这块内存地址没有变量的设定,所以只能通过指针进行访问。
67     
68     //变量的值和变量的地址的区别?
69     //变量地址是房间的号码,而变量的值是房间里的东西。可以通过变量取得房间里东西,也可以通过指针取得房间里的东西。指针里存着房间的号码。
70 
71     //new出来的内存区域不用了一定要用delete释放掉。通过变量申请到的内存是自动释放的。
72     delete s; //delete+指针名。
73 
74     int t;
75     cin >> t;
76     return 0;
77 }

猜你喜欢

转载自www.cnblogs.com/uimodel/p/9346568.html