美文网首页
笔记06:C++中的指针

笔记06:C++中的指针

作者: Wayne_Dream | 来源:发表于2018-11-12 14:41 被阅读5次

1.指针含义

计算机在存储数据的时候必须跟踪3种基本属性

1.存储位置
2.存储的值
3.存储的信息类型

指针是一个变量,存储的是地址。 所以指针本质是一个地址!看到指针条件反射想到地址。
对于一个常规变量,&运算符就能够取得他的地址。所以一个变量var,那么&var就是一个地址。
输出地址是以十六进制来输出的。
对于一个指针变量pointer,*pointer表示解除引用,将其应用于指针,可以得到该地址存储的值。且这个值就是常规的值。

#include <iostream>
int main()
{
    int a=3;
    std::cout<<"the address of a:"<<&a<<std::endl;

    int* p_a=&a;
    std::cout<<"the value of p_a is:"<<p_a<<std::endl;
    std::cout<<"*p_a:"<<*p_a<<std::endl;
    return 0;
}
运行结果
可以知道,这里的int变量和指针变量就像同一个硬币的正反面。变量表示值,可以使用&来得到地址。 指针变量表示地址,并且可以使用*来得到值 .
p_a和a就是等价的。这个一定要知道,是后面修改的基础。&(取址运算符)和(间接访问运算符/解引用指针)。

2.指针的应用

交换a,b的值

#include <iostream>
using namespace std;

void swap1(int *a, int *b)
{
    int c;
    c = *a;
    *a = *b;
    *b = c;
}
int main()
{   
    int a = 1, b = 5;
    cout << "交换前:" << endl;
    cout << "a:" << a << "  " << "b:" << b << endl;
    swap1(&a, &b);
    cout << "交换后:" << endl;
    cout << "a:" << a << "  " << "b:" << b << endl;
    system("pause");
    return 0;
}
运行结果

通过指针来交换a,b的地址,来达到交换a,b值的目的,如果不使用指针,而是直接将实参a,b传给形参,最终结果a,b的值并不会交换。

还有一种不使用指针的方法来达到交换的目的,就是使用引用&。程序把引用和它的初始值绑定在一起,而不是将初始值拷贝给引用。

#include <iostream>
using namespace std;

void swap1(int &a, int &b)
{
    int c;
    c = a;
    a = b;
    b = c;
}
int main()
{   
    int a = 1, b = 5;
    cout << "交换前:" << endl;
    cout << "a:" << a << "  " << "b:" << b << endl;
    swap1(a, b);
    cout << "交换后:" << endl;
    cout << "a:" << a << "  " << "b:" << b << endl;
    system("pause");
    return 0;
}
运行结果

3.*和&的多重含义

*和&既能用作表达式里的运算符,也能作为声明的一部分出现,符号的上下文决定了符号的意义:

int i = 42;    
int &r = i;  //&紧随类型名出现,因此是声明的一部分,r是一个引用
int *p;     //*紧随类型名出现,因此是声明的一部分,p是一个指针
p = &i;   //&出现在表达式中,是一个取地址符
*p = i;   //*出现在表达式中,是一个解引用符
int &r2 = *p;  //&是声明的一部分,*是一个解引用符

4.指针使用时需要注意的点(持续更新):

  • 1,初始化所有指针,使用未经初始化的指针是引发运行时错误的一大原因。如果真的不清楚指针应该指向何处,就把它初始化为nullptr或者0
  • 2,

相关文章

  • 笔记06:C++中的指针

    1.指针含义 计算机在存储数据的时候必须跟踪3种基本属性 1.存储位置2.存储的值3.存储的信息类型 指针是一个变...

  • C++ 笔记 - 基础语法篇

    C++ 笔记 - 基础语法篇
    this 指针 在 C++ 中,每一个对象都能通过...

  • [C++之旅] 16 对象指针/对象成员指针/this指针

    [C++之旅] 16 对象指针/对象成员指针/this指针 一、对象指针 对象指针指向堆中地址 对象指针指向栈中地...

  • C++基础

    C++ 值传递、指针传递、引用传递详解C++中引用传递与指针传递区别 引用传递和指针传递的区别 引用的规则:(1)...

  • 指针和引用的区别

    参照lyd_253261362的专栏的文章详细介绍=====c++中的引用与指针的区别 c++中的引用与指针的区别...

  • java中的引用与c++中的指针的区别

    java中的引用与c++中的指针的区别 Java的引用和C++的指针都是指向一块内存地址的,通过引用或指针来完成对...

  • 学习笔记3(指针运算,函数参数与指针,数组指针,二级指针)

    一、指针运算 二、数组与指针 三、指针和函数参数 java中: C/C++中: 四、指针数组 五、 二级指针 六、...

  • C++知识点

    C++基本方法: C++ memcpy C++基本特性: C++引用(vs指针) C++指针 C++封装: 将...

  • JNI总结

    java调用c/c++ 在C中:JNIEnv 结构体指针别名env二级指针 在C++中:JNIEnv 是一个结构体...

  • java

    1.java白皮书的关键术语 简单的参照c++,是c++语法的纯净版本但没有c++中的头文件,指针运算(甚至指针语...

网友评论

      本文标题:笔记06:C++中的指针

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