zoukankan      html  css  js  c++  java
  • 指针

    一、搞清关键

    	int i = 10, *p = &i;
    • 说法:指针 = 指针变量
    • 指针的地址:指针变量在内存中的地址,获取方式为:&p
    • 指针指向的对象的地址:等价于指针变量的内容,是指针变量所占的内存空间中的内容,获取方式为:p 或 &i
    • 指针 p 指向变量 i:指针变量 p 的(p的值就是p所占内存空间的内容)为变量 i 的地址
    • 不初始化指针:该指针(变量)所占的内存空间中的内容作为该指针的初始值,即被看作一个地址值

    【指针既是类型也是变量??】

    指针:指向另一种类型的复合类型,即指针是一种类型

    譬如说,我们定义指针变量 pint *p;

    我们往往称 p 为指针 p,但若我们定义整形变量 i:int i;

    我们不会称 i 为整型 i,而是称为变量 i

    其实我们所谓的“指针 p”相当于“指针变量 p”,所以我们以后在谈到指针时,就直接将指针视为指针变量,潜在之意是谈到指针,不要想它是一个类型,只想它是一个变量即可。

    于是,一系列名词来袭:“指针指向”=“指针变量的值为”、“空指针”=“指针变量变量的值为0”、“初始化指针”=“初始化指针变量”

    二、空指针

    • 空指针不指向任何对象(因为将其内存空间的值定义为0了,也即该指针指向地址为0的内存空间)

    【生成空指针的几种方法】

    	//way 1
    	int *p1 = nullptr;        //等价于int *p1 = 0;
    	
    	//way 2
    	int *p2 = 0;            //通过将指针初始化为字面值0来生成空指针
    	
    	//way 3
    	int *p3 = NULL;			//等价于int *p3 = 0;
    

    【nullptr】

    • 字面值,用它来初始化指针是得到空指针最直接的方法。
    • nullptr 是一种特殊类型的字面值,它可以被转换成任意其他的指针类型

    【NULL】

    • 预处理变量,可以用它来给指针赋值,它是在头文件 cstdlib 中定义的,它的值就是0。

    三、示例

    题目:编写一个函数,使用指针形参交换两个整数的值。

    #include <iostream>
    #include <vector>
    #include <string>
    
    using std::cin;
    using std::cout;    
    using std::endl;
    using std::vector;
    using std::string;
    
    void swap(int *p1, int *p2)
    {
    	int tmp;
    	tmp = *p1;
    	*p1 = *p2;			//改变P1所指对象的值 
    	*p2 = tmp;
    }
    
    int main() 
    {
    	int a, b;
    	while (cin >> a >> b) {
    		cout << "交换前:a = " << a << ", b = " << b << endl;
    		swap(&a, &b); 
    		cout << "交换后:a = " << a << ", b = " << b << endl;
    	}
        return 0;
    }
    

      

  • 相关阅读:
    疯狂学java的第七天
    疯狂学java的第六天
    疯狂学java的第五天
    学java的第四天
    学java的第三天
    javaSE_20_常用API(包装类丶BigInteger类丶BigDecimal类 )
    javaSE_19_常用API(String类丶StringBuffer类)
    javaSE_17_内部类丶常用的引用类型用法总结
    javaSE_15_package和import丶访问控制权限
    javaSE_14_抽象类丶接口
  • 原文地址:https://www.cnblogs.com/xzxl/p/7647306.html
Copyright © 2011-2022 走看看