4章 指针和引用

2019-06-29  本文已影响0人  拿着苹果学猪叫

4.1指针定义与使用

通过“变量名”可以访问该变量对应内存单元,
实际上,我们还有可以直接通过“地址”来访问某个内存元素

4.1.1 声明一个指针变量是个双刃剑

指针是一种数据变量

和普通变量一样,在使用指针变量之前应该对指针变量进行声明
类型指针变量名://如intpNum;

“*”表明语句的是一个指针变量,类型指定了指针所指的内存单元的数据类型

提示:
可以将int*理解成一种复合类型,是指向int型数据的指针。

#include<iostream>
using namespace std;
int main()
{
    double num = 3;//声明一个double型变量
    double*pNum;//声明一个double型指针变量pNum
    pNum = &num;//用num的地址为pNum赋值
    cout << "pNum在内存中的位址是:" << &pNum << endl;
    cout << "pNum的值为:" << pNum << endl;
    cout << "num在内存的地址为:" << &num << endl;
    cout << "可以使用指针访问num:" << *pNum << endl;//输出指针pNum占据的内存大小
    cout << "pNum(指针类型)在内存中的字节数:" << sizeof(pNum) << endl;
    //输出double变量num占据的内存大小
    cout << "num(double型)在内存中的字节数" << sizeof(num) << endl;
    return 0;


}
pNum在内存中的位址是:008FF9A4
pNum的值为:008FF9B0
num在内存的地址为:008FF9B0
可以使用指针访问num:3
pNum(指针类型)在内存中的字节数:4
num(double型)在内存中的字节数8

4.1.4 指针赋值

#include<iostream>
using namespace std;
int main()
{
    short num1 = 100, *pNum1 = &num1;
    //声明一个short类型指针,并用short变量Num1的地址给初始化
    long*pNum2 = (long*)pNum1;//强制转换用pNum1位long型的pNum2赋值
    cout << "pNum1的地址:" << &pNum1 << endl;
    cout << "pNum2的地址:" << &pNum2 << endl;
    cout << "pNum1的内容:" << &pNum1 << endl;
    cout << "pNum2的内容:" << &pNum2 << endl;
    cout << "pNum2指向的值为:" << *pNum2 << endl;
    return 0;
pNum1的地址:006FFEBC
pNum2的地址:006FFEB0
pNum1的内容:006FFEBC
pNum2的内容:006FFEB0
pNum2指向的值为:-859045788

4.2 指针的运算

1.指针与整数的加减
指针与整数的加减,表示指针在内存空间向上或向下移动整数个单位内存,

指针变量进行加N运算:
指针变量新值=指针变量当前+N*指针所指类型占用的内存字节数
2.同类型指针间的比较
3.同类型指针相减
公式计算:
(指针1的值-指针2的值)/指针所指变量占用的内存字节数.
4.3动态内存分配

  1. 使用new动态分配内存。
    为一个变量分配动态的内存的基本格式
    类型名*指针变量名=new类型名
    其中的“new类型名”通知编译器:需要开辟的内存是用来存储的值是什么类型,
    new操作符能根据这个类型名来自动计算要分配的存储空间的大小。
    int*pNum=new int
    2.使用delete动态释放动态申请的内存
//使用new申请动态数组OperatorNew
#include<iostream>
using namespace std;
int main()
{
    int num = 0;
    int i;
    cout << "请输入数组个数:" << endl;
    cin >> num;
    cout << "请依次输入" << num << "个整数(用空格隔开):" << endl;
    //申请一块可存放num个int型数据的动态内存,将首地址赋值给指针
    int*pSz = new int[num];
    for (i = 0; i < num; i++)
        cin >> pSz[i];//for语句为动态数组中的元素赋值
    for (i = 0; i < num; i++)
        cout << "第" << i << "个数为:" << pSz[i] << endl;
    delete[]pSz; //释放动态内存
    return 0;
}
请输入数组个数:
4
请依次输入4个整数(用空格隔开):
12
23
12
45
第0个数为:12
第1个数为:23
第2个数为:12
第3个数为:

4不要使用或释放已经释放的内存块

char*pC!=new char[];
if(pC!=null)//执行操作
else//内存申请失败处理

4.4指针和const

const在不同位置可以达到三个目的:

int x = 0;
int*const pInt = &x=
上一篇下一篇

猜你喜欢

热点阅读