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++知识库 -> 2.1、预备知识-指针 -> 正文阅读

[C++知识库]2.1、预备知识-指针

2、预备知识

指针

指针的重要性:

? ?????指针是C语言的灵魂

定义:
?????地址:

? ??????????内存单元的编号

? ??????????从0开始的非负整数

? ??????????范围:0 – FFFFFFFF(32位的计算机:地址范围:0~4G-1)

? ?????指针:

? ??????????指针就是地址,地址就是指针。

? ??????????指针变量是存放内存单元地址的变量

? ??????????指针的本质是一个操作受限的非负整数

? 分类:

  1. 基本类型的指针

    #include<stdio.h>
    
    int main(void)
    {
    	int* p; // p是一个变量名,int * 表示该p变量只能存储int类型变量的地址。
    
    	int i = 10;
    	int j;
    
    	p = &i;
    	j = *p; // 等价于 j = i;
    	printf("i = %d, j = %d, *p = %d\n", i, j, *p); // i = 10, j = 10, *p = 10
    
    	return 0;
    }
    
    #include<stdio.h>
    
    void f(int* p) // 定义了一个名字叫 p 的形参,类型是 int *
    {
    	*p = 100; // 此时 *p 就是 i
    }
    int main(void)
    {
    	int i = 9;
    
    	f(&i);
    	printf("i = %d\n", i);
    
    	return 0;
    }
    
  2. 指针和数组的关系

    #include<stdio.h>
    
    int main(void)
    {
    	int a[5] = { 1,2,3,4,5 };
    
    	//a[3] 等价于 *(3+a)
    	int j = 3[a]; // 3[a] 等价于 *(3+a)
    
    	printf("j = %d\n", j); // 4
    	return 0;
    }
    
    // 通过函数打印主调函数中的数组:需要传入 数组首地址(即数组名)和数组长度(len)
    #include<stdio.h>
    
    void show_array(int* p, int len)
    {
    	int i;
    	for (i = 0; i < len; i++)
    		printf("%d\n", p[i]);
    }
    
    int main(void)
    {
    	int a[5] = { 1,2,3,4,5 };
    	show_array(a, 5); // a等价于 &a[0],&a[0]本身就是 int * 类型
    
    	return 0;
    	     
    }
    

所有的指针变量只占4个子节 用第一个字节的地址表示整个变量的地址

eg:

#include<stdio.h>

int main(void)
{
	double* p;
	double x = 66.6;

	p = &x; // x占8个字节,1个字节是8位

	double arr[3] = { 1.1,2.2,3.3 };
	double* q;
	q = &arr[0];

	printf("%p\n", q); // %p实际上就是以十六进制输出
	q = &arr[1];
	printf("%p\n", q);

	/*
	*	运行结果:A8+8 = BO
		000000206D34F7A8
		000000206D34F7B0
	*/
	return 0;
}

如何通过函数修改实参的值?

#include<stdio.h>

void f(int ** q);
int main(void)
{
    int i = 10;
    
    int * p = &i;
    printf("%p\n",p);
    f(&p);
    printf("%p\n",p);
    return 0;
}

void f(int ** q)
{
    *q = (int *)0xFFFFFFFF;
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-28 22:43:27  更:2021-12-28 22:44:15 
 
开发: 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年11日历 -2024/11/24 10:57:23-

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