十一、指针

(1)指针的定义和使用

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

参考视频:https://www.bilibili.com/video/BV1et411b73Z?from=search&seid=4205594350351753444

已投币三连,非常好的视频教程,感谢up主的奉献。

(1)指针变量的定义和使用:

指针变量定义语法:

数据类型  *  变量名;
#include <iostream>
using namespace std;int main() {int a = 13;int* p;// 指针指向数据a的地址p = &a;cout << "a的内存地址为:" << &a << endl;cout << "指针p为:" << p << endl;cout << endl;// 解引用*p = 100;cout << "a = " << a << endl;cout << "*p = " << *p << endl;system("pause");return 0;
}
------------------------------------------------------------
a的内存地址为:007FF988
指针p为:007FF988a = 100
*p = 100
请按任意键继续. . .

(2)指针所占用的空间

指针也是一种数据类型,这种数据类型占用多少内存字节呢?

#include <iostream>
using namespace std;int main() {int a = 13;int* p;// 指针指向数据a的地址p = &a;cout << "sizeof(int * ) = " << sizeof(int*) << endl;cout << "sizeof(float * ) = " << sizeof(float*) << endl;cout << "sizeof(double * ) = " << sizeof(double*) << endl;cout << "sizeof(char * ) = " << sizeof(char*) << endl;system("pause");return 0;
}Debug x86:------------------------------------------------------------------------
sizeof(int * ) = 4
sizeof(float * ) = 4
sizeof(double * ) = 4
sizeof(char * ) = 4
请按任意键继续. . .Debug x64:------------------------------------------------------------------------
sizeof(int * ) = 8
sizeof(float * ) = 8
sizeof(double * ) = 8
sizeof(char * ) = 8
请按任意键继续. . .

指针所占用的内存空间大小,只跟操作系统有关。32位系统为4字节,64位系统为8字节。

指针前面的数据类型,只是表示这段指针对应的值的数据类型,并不是指针的类型。

修改程序运行在32位、64位操作系统环境,在这里勾选 x86、x64。

(3)空指针

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

用途:初始化指针变量。

注意:空指针指向的内存是不可以访问的。

#include <iostream>
using namespace std;int main() {//空指针int* p = NULL;//*p = 100;cout << "指针p指向的内存地址: " << p << endl;cout << "指针p指向的值为: " << *p << endl;system("pause");return 0;
}
-------------------------------------------------------
指针p指向的内存地址: 00000000D:\VS_C++_PRJ\demo01\Debug\demo01.exe (进程 11668)已退出,代码为 -1073741819。
按任意键关闭此窗口. . .

(4)野指针

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

注意:在程序中,尽量避免出现野指针。

#include <iostream>
using namespace std;int main() {//野指针int * p = (int *)0x21003000;//*p = 100;cout << "指针p指向的内存地址: " << p << endl;cout << "指针p指向的值为: " << *p << endl;system("pause");return 0;
}
---------------------------------------------------------------------------
指针p指向的内存地址: 21003000D:\VS_C++_PRJ\demo01\Debug\demo01.exe (进程 7944)已退出,代码为 -1073741819。
按任意键关闭此窗口. . .

(5)const修饰指针(超级重要)

const修饰指针有三种情况:

1.const修饰指针  ----  常量指针

2.const修饰指针  ----  指针常量

3.const既修饰指针,也修饰常量

const修饰指针  ----  常量指针:

int a = 10, b = 10;// 常量指针
// 特点:指针的指向可以修改,但是指针指向的值不可修改
const int * p = &a;*p = 20;    // 错误,指针指向的值不可以修改
p = &b;     // 正确,指针的指向可以修改

const修饰指针  ----  指针常量:

int a = 10, b = 10;// 指针常量
// 特点:指针的指向不可以修改,指针指向的值可以修改
int * const p = &a;*p = 20;    // 正确,指针指向的值可以修改
p = &b;     // 错误,指针的指向不可以修改

const既修饰指针,也修饰常量:

int a = 10, b = 10;// 指针常量
// 特点:指针的指向、指针指向的值,都不可以修改
const int * const p = &a;*p = 20;    // 错误,指针指向的值不可以修改
p = &b;     // 错误,指针的指向不可以修改

(6)指针和数组

作用:利用指针访问数组中的元素

int main() {int str1[10] = {11, 56, 82, 42, 85, 45, 89, 23, 41, 57};int* p = str1;cout << *p << endl;cout << *p + 1 << endl;cout << *(p + 1) << endl;p++;cout << *p << endl;system("pause");return 0;
}
-------------------------------------------------------------------
11
12
56
56
请按任意键继续. . .

(7)指针和函数(地址传递)

作用:利用指针做函数参数,可以修改实参的值。

与10.3值传递,对比着看。

要点:如果不想修改实参,就用值传递。如果想修改实参,就用地址传递。

int swap(int * num1, int * num2)
{int xtemp = *num1;*num1 = *num2;*num2 = xtemp;return 0;
}int main() {int a = 22;int b = 55;cout << "a = " << a << endl;cout << "b = " << b << endl;cout << endl;swap(&a, &b);cout << "a = " << a << endl;cout << "b = " << b << endl;cout << endl;system("pause");return 0;
}
---------------------------------------------------------
a = 22
b = 55a = 55
b = 22请按任意键继续. . .

(8)指针、数组、函数,配合使用案例

c/c++教程 - 1.9 指针 空指针 野指针 const修饰指针 指针常量 常量指针 指针和数组 指针和函数相关推荐

  1. C++阶段01笔记07【指针(基本概念、变量定义和使用、内存空间、空指针和野指针、const修饰指针、指针和数组、指针和函数)】

    C++| 匠心之作 从0到1入门学编程[视频+课件+笔记+源码] 目录 7 指针 7.1 指针的基本概念 7.2 指针变量的定义和使用 示例 7.3 指针所占内存空间 示例 7.4 空指针和野指针 示 ...

  2. C++学习笔记(十)成员变量和成员函数分开存储、this指针、空指针访问成员函数、const修饰成员函数、友元

    1.成员变量和成员函数分开存储 //1.在C++中,类内的成员变量和成员函数分开存储 //2.只有非静态成员变量才属于类的对象上 //空对象占用内存空间为:1 //C++编译器会给每个空对象也分配一个 ...

  3. C语言学习之 数组,指针,字符串. (一)

    2019独角兽企业重金招聘Python工程师标准>>> 此文由来: 是看到野鬼发表的关于C语言知识内容后,一激动,手一痒.回了一篇.可惜误操作让回复没能保存. 之后再写就是下面的内容 ...

  4. C语言指针这一篇够了(一万二千字,包含指针与数组,函数指针等详解)

    目录 零.前言 一.指针的定义 二.指针类型的意义 1.指针类型决定了指针解引用时一次访问几个字节. 2.指针类型决定了指针加减整数时的步长 三.野指针 1.未初始化的指针 2.指针的越界访问 3.指 ...

  5. const修饰指针的效果

    1.const关键字 const关键字经常用来修饰常量,也就是说当有个变量你不希望改变时,可以用const来修饰 const int num=20;num=30;//错误,const修饰的变量不可改变 ...

  6. php 数组 指针,php之数组指针详解

    本文主要和大家分享php之数组指针详解,首先我们会和大家分享php 数组指的针操作方法,希望能帮助到大家. 一.php 数组指针操作 利用php的内置函数:key,current,next(),pre ...

  7. const修饰指针和引用的用法【转贴】

    *************************************************** 更多精彩,欢迎进入:http://shop115376623.taobao.com ****** ...

  8. 面试准备每日五题:C++(六)——CC++、staticconstextern、sizeof strlen、指针引用、数组指针指针数组函数指针

    文章目录 一.C和C++的区别是什么? 二.关键字static.const.extern作用 三.sizeof和strlen的区别 四.指针和引用的区别 五 .指针数组.数组指针.函数指针 一.C和C ...

  9. 指针数组和数组指针有什么区别?

    你好,很高兴您能读到这篇关于指针的博客,博客内容我将会以最简单的方式带您了解指针数组和数组指针的区别,那么开始正题. 指针数组,重点在于数组.例如我们常用的整形数组,字符数组等,它们的名字前半部分是存 ...

最新文章

  1. i-jetty环境搭配与编译
  2. 获取request header的值
  3. Linux的进程间通信-消息队列
  4. 复数矩阵QR分解算法的C++实现
  5. js 预编译 解释执行 作用域链 闭包
  6. dart系列之:dart类中的构造函数
  7. 事关每个程序员的职业规划与履历
  8. java - 猴子吃桃
  9. python错误代码40035_[Python]网络爬虫(三):异常的处理和HTTP状态码的分类
  10. Python3 解释器
  11. 在eclipse4.5.1官方英文版利用官方语言包汉化的方法
  12. 谈谈一些有趣的CSS题目(十三)-- 巧妙地制作背景色渐变动画!
  13. 简单绑定要注意的问题_AX
  14. Delphi中Sender对象的定义
  15. 百度ocr文字识别接口使用
  16. SpringBoot(二)
  17. 最好用的HDR图像处理器——Photomatix Pro新功能介绍及使用教程
  18. 网易云 计算机,网易云音乐电脑版2.7.4.198336_网易云音乐 - 系统之家
  19. linux dd 错,dd命令错误写入设备上没有剩余空间[关闭](dd command error writing No space left on device [closed])...
  20. android 聊天气泡背景图片,聊天气泡背景图片拉伸设置

热门文章

  1. python D9 初识函数
  2. python装饰器之函数作用域
  3. 【数据库开发】windows下hiredis的编译(主要是包括一些异步编程的错误)
  4. 利用脚本启动java程序
  5. ActiveXObject
  6. 经典的0.001秒,让程序回复正常的0.001秒。
  7. 《音频、图像及视频技术》学习笔记
  8. 利用jquery的ajax获取后台返回的json数据为空
  9. SuseLinux详解(1)——设置开机启动为命令行模式
  10. easyui tree设置选中节点的方法