乐趣区

关于c++:c重要的概念部分

1. const 润饰指针

#include <iostream>

using namespace std;

int main() {
    // 1、const 润饰指针 指针常量
    int a = 10;
    int b = 20;

     int* const p = &a;// 指针常量 ==> 须要带上 &  视为援用值
     // 特点:指针的指向能够改,指针指向的值不能够改
     *p = 200;// 正确
     //p = 450;// 谬误 
     cout << *p << endl;
    
     // 2、const 润饰指针 常量指针
     const int* k = &a;
    // 特点: 指针的指向不能够改,指针指向的值能够改
     //*k = 900;// 谬误
     k = &b;
    
     cout << *k << endl;
    return 0;
}

2. 指针和数组

#include <iostream>

using namespace std;

///// <summary>
///// 获取数组的长度
///// </summary>
///// <typeparam name="T"></typeparam>
///// <param name="arr"></param>
///// <returns></returns>
template<class T> int length(T& arr) {int len = sizeof(arr) / sizeof(arr[0]);
    return len;
}

int main() {int arr[] = {37,21,3,49};
    cout << "拜访数组中的第一个元素:" << arr[0] << endl;
    int* p = arr;
    cout << "利用拜访数组中的第一个元素:" << *p << endl;
    ++p;
    cout << "利用拜访数组中的第二个元素:" << *p << endl;

    // 利用指针循环取值 [原理是指针偏移 第一个地址向后偏移一位 就是向后取值]
    int* pz = arr;
    for (int i = 0; i < length(arr); i++)
    {
        cout << "利用拜访数组中的第"<<i+1<<"个元素:" << *pz << endl;
        ++pz;
    }

    return 0;
}

3. 值传递和地址传递(相当于 java 的援用传递)

值传递:特点 不扭转原有值

援用传递:形式 利用 & 变量名(代表的是援用),理论传递的是地址,调用办法应用指针,这样就能扭转指针的值,从而做到扭转原有变量值的扭转


【这个图没看到也没关系,晓得是地址“替换”就行了】

4. 空指针和野指针

1. 空指针
定义:指针默认为空,个别用于初始化定义,但不能拜访这个空指针,不然会报错

2. 野指针

定义: 野指针是指向非法的内存空间

#include <iostream>
using namespace std;
//#include "swap.h";

int main() {
    // 指针变量 p 指向内存地址编号 0x1203 的空间
    int* p = (int*)0x1203;

    // 拜访野指针报错
    cout << *p << endl;
    return 0;
}

本文来源于:程序员 ken,专属平台有 csdn、思否(SegmentFault)、简书、开源中国(oschina)、掘金,转载请注明出处。

退出移动版