小朋友学C++(45):指针与数组的关系
时间:2022-06-18
本文章向大家介绍小朋友学C++(45):指针与数组的关系,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
数组名称实际上相当于一个指针,指向数组第一个元素所在的地址。
例1 用指针方式输入输出数组元素
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int a[n];
for(int i = 0; i < n; i++)
{
// 挨个赋值
// p + i表示指针的位置挪动了i * sizeof(int)个内存地址,即指向了第i个元素
cin >> *(a + i) ;
}
for(int i = 0; i < n; i++)
{
cout << *(a + i) << endl;
}
return 0;
}
运行结果:
3
10 20 30
10
20
30
分析: 在这个例子里,a既是数组名称,也代表指向第一个元素的指针。 a + 0 = a表示第一个元素a[0]的地址,a + 1表示第二个元素a[1]所在的地址。a + 2表示第三个元素a[2]的地址。(a + 0) = a[0],(a + 1) = a[1],*(a + 2) = a[2]。 注意,这里a + 1不是表示a的地址直接加1,而是表示下一个元素的地址,即a指向的地址 + 1 * sizeof(元素类型)。 假设a[0]的地址为0x00000020,则 a = 0x00000020; a + 1 = 0x00000020 + 1 * 4 = 0x00000024; a + 2 = 0x00000020 + 2 * 4 = 0x00000028。 这里之所以要乘以4,是因为每个整型数据占4个字节的内存。如果是字符型数组,那么应该乘以1,如果是double型数组,那么应该乘以8。
例2:动态申请内存
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int *a = new int[n]; // 用new动态申请内存
for(int i = 0; i < n; i++)
{
cin >> *(a + i);
}
for(int i = 0; i < n; i++)
{
cout << *(a + i) << endl;
}
delete a; // 释放内存
return 0;
}
运行结果:
3
10 20 30
10
20
30
分析: 这里使用了new来申请内存,delete来释放内存。这是动态申请内存的方式。而int a[3];则是静态申请内存的方式。 动态申请内存的方式,当你使用delete释放后,这块内存就可以另做它用了。而静态申请的内存,若是为局部变量申请的内存,则等当前函数执行完后,内被释放;若是为全局变量申请的内存,则等整个程序运行结束后,内存才会被释放。 所谓“动态”,就是“随时申请,随时释放”的意思。 C++用new/delete来动态申请/释放内存,C语言则用malloc()/free()来动态申请/释放内存。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- C++控制台程序接收、解析参数及被如何调用、调试
- C++11标准常用特性---统一初始化
- QPainter的fillRect函数-QGradient-Preset渐变颜色预设值
- 深度学习|Tensorflow2.0进阶
- Mumble——简介及搭建
- 网站开启HSTS增强安全性
- 形式化分析工具(六):HLPSL Tutorial(Example 4,other)
- Typecho回复可见功能
- 微信小程序开发实战(13):图像组件(image)
- Typecho文章代码高亮功能
- “数据分析师”面试最怕被问到的SQL优化问题(下)
- 普通小程序的订阅消息不再限制时间
- Telnet 配置实验
- 网站加速那些事
- Python逻辑运算