IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 程序设计与算法(一)C语言程序设计 -> 正文阅读

[C++知识库]程序设计与算法(一)C语言程序设计

第八周(笔记)

8.1 指针的基本概念和用法

  • 指针的基本概念
    • 指针,也称作指针变量,大小为4个字节(或8个字节)的变量,其内容代表一个内存地址。
    • 通过指针,能够对该指针指向的内存区域进行读写
    • 如果把内存的每个字节都想成宾馆的一个房间,那么内存地址就相当于房间号,而指针里存放的就是房间号
  • 指针的定义
    • 类型名字 * 指针变量名;例如:int * p , char * pc , float * pf
  • 指针的内容
    • int * p = (int * ) 40000;p指向地址40000,地址p就是地址40000 ( * p)代表地址40000开始处的若干个字节的内容
  • 通过指针访问其指向的内存空间
    • int * p = (int * )40000; * p = 5000; int n = * p;解释:①往地址40000处起始的若干个字节的内容存储的空间里写入5000,②将地址40000处骑士的若干字节内容赋值给n(若干=sizeof(int)因为int * )
  • 指针用法:char ch1 = ‘A’;char * pc = &ch1; (&:取地址运算符)

8.2 指针的意义和互相赋值

  • 指针的作用
    1. 有了指针,就有了自由访问内存空间的手段
    2. 不要要通过变量,就能对内存直接进行操作,通过指针程序能访问的内存区域就不仅限于变量所占据的数据区域。例如:用指针p指向a的地址,然后对p进行加减操作,p就能指向a后面或前面的内存区域,通过p也就能访问这些内存区域
  • 指针的互相赋值
    1. 不同类型的指针,如果不经过强制类型转换,不能直接相互赋值

8.3 指针的运算

  1. 两个同类型的指针,可以比较大小(比较的是地址)
    • 地址p1 < 地址p2 == p1 < p2 值为真
  2. 两个同类型的指针变量,可以相减
    • 两个T * 类型的指针p1和p2,p1 - p2 = (地址p1-地址p2)/sizeof(T)
    • 例如:如p1指向地址1000,p2指向地址600,则p1-p2 = ( 1000-600)/sizeof(int) = (1000-600)/4 = 100;也就是说p1这个地址到p2这个地址之间能放下100个int型变量
  3. 指针变量加减一个整数的结果是指针
    • p: T * 类型的指针,n:整数类型的变量或常量,p+n:T * 类型的指针,指向地址:p+n * sizeof(T)
  4. 指针变量可以自增、自减:p++:p指向 n+sizeof(T类型)p–同理
  5. 指针可以用下标运算符" [ ] ":p[n] 等价于 * (p+n)
  6. 通过指针实现自由内存访问
    • 如何访问int型变量a前面的那一个字节,如果使用–p的话访问的是前面四个字节,所以我们可以用强转,转为char之后再减减(运行可能出错,因为你不知道前一个字节是否能访问)

8.4 指针作为函数参数

  1. 空指针
    • 指针0不能访问。只想地址0的指针就是空指针(可用NULL表示)
    • 指针可以作为条件表达式使用。如果指针的值为NULL,则相当于为假,值不为NULL,就相当于真,例:if§ 等价于 if(p!=NULL) if(!p)等价于 if(p==NULL)
  2. 指针作为函数参数
    • 形参为指针变量,实参为地址

8.5 指针和数组

  1. 数组的名字是一个指针常量,指向数组的起始地址
    • 例如 T a[N]; a的类型是T * ,可以用a给一个T * 类型的指针赋值,a是编译时其值就确定了的常量,不能够对a进行赋值
    • 作为函数形参时, T * p 和 T p[ ] 等价
      • 例如: void Func (int * p)与void Func (int p[ ])是相等的
#include <iostream>
using namespace std;
int main()
{
    int a[200];
    int * p;
    p = a; //p指向数组a的起始地址,即p指向了a[0]
    * p = 10;//a[0] = 10
    * (p+1) = 20; //a[1] = 20
    p[0] = 30;//p[i] 等价于*(p+i)
    p[4] = 40;//a[4] = 40
    for (int i = 0;i<10;i++) {
        *(p+i) = i;
    }
    p++;
    cout << p[0] << endl; //输出1
    p = a + 6;
    cout << * p << endl; //输出6
    return 0;
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-04 11:00:48  更:2021-08-04 11:01:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/10 2:28:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码