c++ 指针

指针变量

内存的概述:在32位平台中,每一个进程 拥有4G的空间。

系统为内存的每一个字节 分配一个32位的地址编号(虚拟地址)。这个编号称为地址。

无论什么类型的地址,都是存储单元的编号,在32位平台下都是四个字节,即任何类型的指针变量都是4个字节大小。

地址和指针变量的关系

地址 就是内存的地址编号。

指针变量:本质是变量 只是该变量 保存的是 内存的地址编号。(不是普通的数值)

普通变量
   9527

       普通数值

指针变量
                                                             9527

    是地址编号9527

指针变量的定义     

1、定义步骤(定义的时候)

        *修饰指针变量p。

        保存谁的地址 就先定义谁。

        从上往下整体替换。

案例1:

定义一个指针变量p        保存 int num的地址:   int *p;

定义一个指针变量p         保存数组int arr[5]首地址:  int(*p)[5];

定义一个指针变量p         保存函数的入口地址:  int fun(int, int); int (*p)(int, int);

定义一个指针变量p         保存结构体变量的地址:  struct stu lucy; struct stu *p;

定义一个指针变量p         保存指针变量int *p的地址:  int **p;

2、在32位平台任何类型的指针变量都是4字节

      在64位平台任何类型的指针变量都是8字节

3、指针变量和普通变量建立关系

int num = 10;

int *p;//在定义的时候,*仅仅为修饰p为指针变量      

          //在使用时,*p表示 取p所保存的地址编号 对应·空间的内容                                                                              

p = #//普通变量和指针变量建立关系 

cout  << *p;//10

指针变量的初始化

指针变量 在操作之前 必须指向合法的地址空间。

1、指针变量 如果不初始化 立即操作 会出现段错误

int *p;

cout << *p <<endl;

2、指针变量 如果没有指向合法的空间 建议初始化为NULL

int *p = NULL;//NULL是赋值给p  int *p; p = NULL;

不要操作 指向NULL的指针变量

3、将指针变量 初始化为 合法的地址 (变量的地址、动态申请的地址、函数入口的地址)

int num = 10;

int *p = &num; //int *p; p = &num;

int data = 10, *p = &data; //data为int类型   p为int *类型

int *p,data; //p为int *类型   data为int类型

指针变量的类型

1、指针变量自身的类型:将指针变量名托黑,剩下的类型就是指针变量自身的类型

int *p;    p自身的类型为int *

指针变量自身的类型 一般用于 赋值语句的判断

int num = 10;

int *p = &num;

//在使用中

//num 为int     &num 为int *      ------->对变量名 取地址 整体类型加一个*

//p 为int *         *p  为int            ------->对指针变量 取*    整体类型减一个*

//在使用中  &和*相遇  从右往左  依次抵消

*&p == p

案例1:int num = 10, *p = &num, **p = &p;以下结果正确的是__ABC__

int num = 10;

int *p = &num;

int **p = &p; 

A:*p = 100     B: *p = &num     C:p = &num     D:q = &num

2、指针变量指向的类型(重要)

将指针变量名和离它最近的一个*一起托黑,剩下的类型就是指针变量指向的类型

int *p;   p指向的类型为int

3、指针变量的指向类型 决定了取值宽度

int num = 0x01020304;

int *p = &num;

为什么 *p == num == 0x01020304?

 

 

4、指针变量的指向类型 决定了+1跨度

 

p1+1表示它跳过了一个单位的跨度;(一个单位几个字节由指针变量的指向类型决定)p1+1跳过了四字节。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值