美文网首页
cpp数组(二):认识指针

cpp数组(二):认识指针

作者: 浩波千里 | 来源:发表于2019-05-20 15:07 被阅读0次

作者邮箱:z_zhanghaobo@163.com
github相关: https://github.com/HaoboLongway/simple_examples

处理存储数据时,把将地址视为指定的量,而将值视为派生量。一种特殊类型的变量——指针用于存储值的地址。因此,指针表示的是地址。*运算符被称为间接值或解除引用(dereferencing)运算符,将其应用于指针,可以得到该地址存储的值(C++通过上下文确定*是解引用还是乘法单目运算符)。
下面的例子演示了指针的基础用法

int updates = 6;    //declare a variable
    int *p_updates;    //declare pointer to an int
    p_updates = &updates;    //assign address of int to pointer

    //express the VALUE
    cout<<"Value: updates = "<<updates;
    cout<<", *p_updates = "<<*p_updates<<endl;

    //express the ADDRESS
    cout<<"Addresses: &updates = "<<&updates;
    cout<<", p_updates = "<<p_updates<<endl;

    //use pointer to change the value
    *p_updates += 2;
    cout<<"Now updates = "<<updates<<endl;
  1. 声明和初始化一个指针
    计算机需要跟踪指针指向值的类型,不同类型存储时的内部格式,占用内存长度等均有不同。因此,指针声明必须指定指向数据的类型。
    在上面的例子包含这样的声明int *p_updates;,这表明*p_updates的类型是int型,因此p_updates一定为指针.我们说p_updates的类型是指向int的指针
    我们可以在声明语句中初始化指针,被初始化的是指针而非它指向的值,因此上面的例子这样写int *p_updates = &updates;

一定要在对指针解引用前初始化为一个确定的,适当的地址
在C++中创建指针时,计算机将分配用来存储地址的内存,但不会分配用来存储指针所指向的数据的内存,为数据提供空间是一个独立的步骤.
如果我们进行这样的操作:float *eg_ptr; *eg_ptr = 233333;在这个例子中,由于eg_ptr没有被初始化,它可能有任何值。但不管值是什么,程序都将它解释为一个存储233333的地址。这种错误会导致一些最隐匿,最难以跟踪的bug.

我们也可以在初始化指针时为其赋地址值,如:

int *pt;
pt = (int *) 0xB8000000;

这里注意,虽然计算机把指针作为整数来处理,但从概念上说,指针描述的是位置,如果把两个指针像整型那样相乘是没有意义的,因此不能简单地把整数赋给指针。因此,像是下面的做法是不合规范的

int *pt;
pt = 0xB8000000;
//在C99标准发布前,C语言允许这样做,
//但C++在类型一致方面要求地更严格,编译器会抛出错误消息,通告类型不匹配

具体分析这一条语句pt = 0xB8000000;这是通过强制类型转换把数字转换为适当地地址类型.


其余文章:

数组与指针基础内容:

指针运算
认识指针
数组指针
数组定义及其初始化

相关文章

  • cpp数组(二):认识指针

    作者邮箱:z_zhanghaobo@163.comgithub相关: https://github.com/Hao...

  • cpp数组(三):数组指针

    作者邮箱:z_zhanghaobo@163.comgithub相关: https://github.com/Hao...

  • 二维数组和指针

    二维数组和指针 ⑴用指针表示二维数组元素。 要用指针处理二维数组,首先要解决从存储的角度对二维数组的认识问题。 一...

  • 二维数组与指针、指针数组、数组指针的用法

    二维数组和指针⑴ 用指针表示二维数组元素。要用指针处理二维数组,首先要解决从存储的角度对二维数组的认识问题。我们知...

  • C语言的数组指针与指针数组(One)

    一、数组指针与指针数组: 数组指针<——>本质是指针 指针数组<——>本质是数组上图: 二、数组指针: int ...

  • LeetCode—— 移动零

    题目描述 一、CPP 1. 双指针法: 解题思路:使用两个指针,指针 i 负责遍历数组,指针 j 负责其后的元素均...

  • cpp数组(四):指针运算

    作者邮箱:z_zhanghaobo@163.comgithub相关: https://github.com/Hao...

  • 数组指针和指针数组

    1.数组指针(又称行指针) 二维数组赋给一指针时: 2.指针数组 二维数组赋给一指针数组: 小结:数组指针只是个指...

  • C++ 进阶篇

    指针数组数组的元素是指针类型Point *pa[2];指针数组与二维数组的差别指针数组的元素在内存中不一定连续,二...

  • c基础—指针运算和函数指针

    二级指针 数组和数组指针 采用指针遍历数组循环赋值 遍历 赋值 指针与数组的几种写法 函数指针(回调) 题目:监听...

网友评论

      本文标题:cpp数组(二):认识指针

      本文链接:https://www.haomeiwen.com/subject/pkunaqtx.html