【C++】深入基础之指针

 

指针是一个值为地址的变量,即:一个存储地址的变量。

//&  取址运算符     *  间接访问运算符/ 解引用指针
#include <iostream>
using namespace std;
int main()
{
   int a=5;
   double b=10.4;
//输出16进制的整形
   cout<<"Address of a:"<<&a<<endl;// 0X69fefc
   cout<<"Address of b:"<<&b<<endl;// 0X69fef0

   cout<<"a:"<<*(&a)<<endl;// 5
   // 得到指针指向的内存中的内容即地址里的内容
}

指针的创建、初始化、赋值、解引用

#include <iostream>
using namespace std;
int main()
{
    int num=5;

    //p_a没有初始化
    int *p_a1,*p_a2;
    // p_a1是int* 类型(指向int的指针)
    // *p_a1是int 类型

    cout<<"p_a1:"<<p_a1<<endl;//指针随机分配一个地址,创建时并未开辟空间
    cout<<"p_a2:"<<p_a2<<endl;

    //初始化
    int *p_b=&num;
    cout<<"p_b:"<<p_b<<endl;

    //同类型指针可以赋值
//指向同一地址
    p_a1=p_b;
    p_a2=&num;
    cout<<"changed p_a1:"<<p_a1<<endl;
    cout<<"changed p_a2:"<<p_a2<<endl;

    *p_b=12;//解引用时,保证指针有赋过地址
}

NULL指针   不指向任何东西的指针(链表经常用到)

#include <iostream>
using namespace std;
int main()
{
    //测试NULL是0

    //转化为NULL指针
    int *p_a=0;
    int *p_b=NULL;
//因为没有指向的地址,所以无法存储值即无法解引用
}

void* 存放任何类型对象的地址

#include <iostream>
int fun(int num)
{
    return num+10;
}
int main()
{
    double x=25.5;
    //普通指针的话类型要严格保证
    double *p=&x;

    //void* 类型可以接受任意类型对象地址
    void *p_v=&x;
    void *p_v2=p;//double* 类型
    std::cout<<"p_v:"<<p_v<<std::endl;
    std::cout<<"p_v2:"<<p_v2<<std::endl;
//返回同一地址即时x的地址
}

指针的指针

#include <iostream>

int main()
{
   int a=10;
   int *p_a=&a;
   int **pp_a=&p_a;//指针指向p_a指针指向的地址

   cout<<"p_a:"<<p_a<<endl<<"*p_a:"<<*p_a<<endl;

   cout<<"PP_a:"<<pp_a<<endl;//指针随机分配的地址
   cout<<"*pp_a:"<<*pp_a<<endl;//指针指向的指针的随即地址
   cout<<"**pp_a"<<**pp_a<<endl;//指针指向的指针的值

}

指针的算数运算

char a[20];  
int *ptr=(int *)a; //强制类型转换并不会改变a 的类型  
//指针ptr类型是int*,指向类型是int

ptr++;  
//编译器处理:指针的值+sizeof(int)即4字节
//变量a地址向高地址方向增加4个字节,因为char是1字节,相当于从数组a的第0号开始的4字节移动到第4号单位开始的4字节

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值