c++之指针

c++之指针,第1张

概述一、指针的基本概念 指针的作用:可以通过指针间接访问内存。 内存编号是从0开始记录的,一般用十六进制数字表示。 可以利用指针变量保存地址。 二、指针变量的定义和使用 指针变量定义语法:数据类型 *变量

一、指针的基本概念

指针的作用:可以通过指针间接访问内存。

内存编号是从0开始记录的,一般用十六进制数字表示。可以利用指针变量保存地址。

二、指针变量的定义和使用

指针变量定义语法:数据类型 *变量名

    int a = 10;    //声明指针变量    int* p;    指针指向a的地址    p = &a;    利用*解引用,找到指针指向内存中的数据    cout << *p << endl;

三、指针所占内存空间

在32位 *** 作系统下,无论指针数据类型是什么数据类型,都是占4个字节,而在64位 *** 作系统中占8个字节。

四、空指针和野指针

1.空指针:指针变量指向内存中编号为0的空间。

用途:初始化指针变量。

注意:空指针指向的内存是不能够访问的。

int* p = NulL;//*p;内存0-255之间的内存编号是系统占用的,不可以访问

2.野指针:指针变量指向非法的内存空间

在程序中,避免出现野指针int* p = (int*)0x1100;

五、const修饰指针

const修饰的指针有三种情况:

const修饰指针--常量指针const修饰常量--指针常量const修饰指针,又修饰常量
    int b = 常量指针,指针指向的值不可以改,指针的指向可以改    即*p=20是非法的,p=&b是合法的    const int* p = &指针常量,指针的指向不可以改,指向的值可以改    即*p2=20是合法的,p2=&b是不合法的    int* const p2 = &指针指向的值和指向的值都不可更改    即* p3 = 20是不合法的,p3 = &b是不合法的    const p3 = &a;

六、指针配合数组使用

1.通过指针可以访问到数组中的值

int main() {    int arr[] = { 1,2,1)">3,1)">4,1)">5,1)">6 };    数组名就是数组的首个元素的地址     arr;    利用指针访问数组中的第一个元素    解引用取出4个字节中的数据    cout << *p << endl;    因为p是一个整型指针,执行p++之后,指针指向的就是下一个元素    p++利用指针访问数组中的第二个元素    cout << *p << endl;}

2.通过指针来遍历数组

    利用指针遍历数组:    int* p2 =for (int i = 0; i < (sizeof(arr) / sizeof(arr[0])); i++) {        cout << *p2 << endl;        p2++;    }

七、指针和函数

主要区别是值传递还是引用传递

1.值传递:改变形参的值不影响传递进来的实参

#include <iostream>using namespace std;voID swap(int num1, num2) {    cout << "交换之前num1的值:" << num1 << endl;    cout << 交换之前num2的值:" << num2 <<int tmp = num1;    num1 = num2;    num2 = tmp;    cout << 交换之后num1的值:交换之后num2的值: endl;} main() {    12;    cout << 实参未传入之前a的值:" << a <<实参未传入之前b的值:" << b << endl;    swap(a,b);    cout << 实参传入之后a的值:实参传入之后b的值: endl;    system(pause");    return 0;}

输出:

2.引用传递:改变形参的值会影响到实参的值;

#include <iostream>int* num1,1)">" << *num1 <<" << *num2 <<int tmp = *num1;    *num1 = *num2;    *num2 = endl;}int* p1 = &int* p2 = &b;    cout <<  endl;    swap(p1,p2);    cout << ;}

输出:

 

 八、指针函数和数组

封装一个函数,利用指针对数组进行冒泡排序。

#include <iostream>voID bubbleSort(int* p,1)"> length) {    如果在这里计算数组的长度,输出为1,因为传入进来的是数组的首地址,里面只存放1个元素    int len = sizeof(arr) / sizeof(arr[0]);    cout << len << endl;    arr是一个指针,指向数组的第一个元素,在数组中用下标访问元素的值时,相当于是将指针指向该元素的内存空间    我的理解是c++会自己定位到那,并取得值    int i = length - 1; i >= 0; i--) {        int j = i - 1; j >= 0; j--) {            if (p[i] < p[j]){                 p[i];                p[i] = p[j];                p[j] = tmp;            }        }    }}voID printArr(int* arr,1)">0; i < length; i++) {        cout << arr[i] << endl;    }}7,1)">6,1)">5注意要在函数外先计算数组的长度    如果在函数里面计算,由于数组传进去的是首元素的地址,则长度永远是1    int length = ]);    bubbleSort(arr,length);    printArr(arr,length);    system(;}

输出:

 

传入数组是引用传递,因此在里面改变了值会影响到原来数组arr的值,所以最后可以直接对arr进行打印输出。 

总结

以上是内存溢出为你收集整理的c++之指针全部内容,希望文章能够帮你解决c++之指针所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/1158868.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存