C++笔记(六)指针

#include<iostream>
#include<string>

using namespace std;

struct user {
    string name;
    int age;
};


int main() {

    //用&获取一个变量的十六进制地址
    int num = 100;
    double dnum = 4.5;
    cout << "num value is " << num << " address is 0x" << &num << endl;
    cout << "dnum value is " << dnum << "  address is 0x" << &dnum << endl;


    //指针用type *name来表示,type表示指针类型,name表示内存地址。*name表示内存地址存储的值.
    int* nump = &num; //声明并初始化一个int类型指针
    cout << "nump=" << nump <<", *nump=" << *nump << endl;


    *nump = *nump + 1;//改变指针的值,也就是改变内存地址中存储内容的值。
    cout << "nump=" << nump << ", *nump=" << *nump << endl;
    cout << "num value is " << num << " address is 0x" << &num << endl;

    /*
        注意:创建指针一定要初始化,即是马上给一个内存地址。
    */


    //new分配内存
    int* pt = new int;
    *pt = 101;
    cout << "*pt value is " << *pt << " address is 0x" << pt << endl;

    //delete释放内存地址
    delete pt;

    /*
    注意delete将释放pt指向的内存,但不会删除指针pt本身,还可以为pt重新分配内存地址。
    一定要配对的使用new 和 delete,否则将发生内存泄露。
    不要释放已释放过的内存地址。不能释放声明变量的内存地址。比如:
    int num = 100;
    int* pp = &num;
    delete pp;//不要这样做
    */

    //使用new创建数组
    int * pi = new int[3];
    pi[0] = 100;
    pi[1] = 200;
    pi[2] = 300;

    cout << "pi[1]=" << pi[1] << endl;
    pi = pi + 1; //c++把数组名解析为地址,地址+1增加的量等于它指向的类型的字节数,这里是int,也就是加4个字节。
    cout << "pi[0]=" << pi[0] << endl;
    pi = pi - 1;
    delete[] pi;//切记要从输出起始位置释放数组地址



    //使用new创建结构
    user* u = new user;
    u->name = "hello";
    u->age = 100;
    cout << u->name << " " << u->age << endl;
    delete u;

    return 0;
}

输出结果:

num value is 100 address is 0x00000089B16FF984
dnum value is 4.5  address is 0x00000089B16FF9A8
nump=00000089B16FF984, *nump=100
nump=00000089B16FF984, *nump=101
num value is 101 address is 0x00000089B16FF984
*pt value is 101 address is 0x0000024F9A6C4CD0
pi[1]=200
pi[0]=200
hello 100
请按任意键继续. . .

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值