当前位置: 首页 > news >正文

C++复习day01

这篇博客主要复习C语言的数组和指针

1.指针数组和数组指针

问:指针数组和数组指针,哪一个是指针,哪一个是数组?
我们来类比一下,整型数组是存放整型的数组,那么指针数组就是一个存放指针的数组,自然而然,数组指针就是一个指向数组的指针

#include <iostream>int main()
{int a = 1, b = 2, c = 3;int* p1 = &a, * p2 = &b, * p3 = &c;int* arr[] = { p1,p2,p3 }; //指针数组int** ptr = arr; //数组指针return 0;
}
2.函数指针

这个有点特殊,所以单独拿出来做一下介绍
首先,函数指针变量应该是⽤来存放函数地址的,未来通过地址能够调⽤函数的。这个函数一定是有地址的

#include <iostream>
void solve()
{std::cout << "今天是复习C++的第一天" << std::endl;
}
int main()
{std::cout << solve << std::endl; //00C3137Astd::cout << &solve << std::endl; //00C3137Areturn 0;
}

可以发现,对函数名取地址和原来的函数名效果相同——也就是说函数名就是地址,同样取函数的地址也可以使用“&函数名”的方法,二者是等效的
提出问题:那么什么叫做函数指针?
回答:顾名思义,就是一个指向函数的指针,请看“VCR”

int (*pf) (int x, int y)| | ------------| | || | pf指向函数的参数类型和个数的交代| 函数指针变量名pf指向函数的返回类型
int (*) (int x, int y) //pf函数指针变量的类型

下面来举一个例子

#include <iostream>int add(int x, int y)
{return x + y;
}
int main()
{//以add()函数为例int (*p)(int, int) = add;std::cout << p(1, 2) << std::endl; //3std::cout << (*p)(1, 2) << std::endl; //3return 0;
}

下面来看,两个比较难的例子,尽量去分析一下

(*(void (*)())0)();void (*signal(int , void(*)(int)))(int);
来分析一下,首先是第一个式子
(void (*)())很明显是一个函数指针类型,意思就是把**int**类型的0强制转化为一个函数指针类型,然后对它解引用,并且调用它第二个例子
signal的第一个参数的int类型,第二个参数是”void(*)int的函数指针类型“,signnal的返回值也是“void(*)int的函数指针类型”,如果typedef void(*func)(int),之后就相当于func signal(int,func)
3.const和指针

const和*的位置不同,会有不一样的效果,他们被称作是指针常量,常量指针

#include <iostream>int main()
{int a = 1, b = 2;const int* p1 = &a;int const* p2 = &a;int* const p3 = &a;p1 = &b;p2 = &b;//p3 = &b; 这个会报错,因为p3是指针常量,指针的指向不能修改,但是指针指向的值可以修改//*p1 = 100;//*p2 = 100; 这两个会报错,因为p1,p2都是常量指针,指针的指向可以改变,但是指针指向的值不能改变*p3 = 100;return 0;
}
4.sizeof,数组,指针

数组名的意义

  1. sizeof(数组名),这⾥的数组名表⽰整个数组,计算的是整个数组的⼤⼩。
  2. &数组名,这⾥的数组名表⽰整个数组,取出的是整个数组的地址。
  3. 除此之外所有的数组名都表⽰⾸元素的地址。
#include <iostream>int main()
{int arr[] = { 1,2,3,4,5 };int* ptr = arr;std::cout << "sizeof(arr) = " << sizeof(arr) << std::endl;std::cout << "sizeof(ptr) = " << sizeof(ptr) << std::endl;return 0;
}
5.sizeof和strlen的区别

sizeof:在学习操作符的时候,我们学习了 sizeof , sizeof 计算变量所占内存内存空间⼤⼩的,单位是
字节,如果操作数是类型的话,计算的是使⽤类型创建的变量所占内存空间的⼤⼩。sizeof 只关注占⽤内存空间的⼤⼩,不在乎内存中存放什么数据
strlen:strlen 是C语⾔库函数,功能是求字符串⻓度。
sizeof 和 strlen的对⽐

sizeofstrlen
sizeof是操作符strlen是库函数
sizeof计算操作数所占内存的⼤⼩,单位是字节srtlen是求字符串⻓度的,统计的是 \0 之前字符的隔个数
不关注内存中存放什么数据关注内存中是否有 \0 ,如果没有 \0 ,就会持续往后找,可能会越界

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Unity(2022.3.41LTS) - UI详细介绍-画布
  • 【JavaEE初阶】JVM内存划分和类加载过程以及垃圾回收
  • 【数据结构】反射,枚举你必须知道的相关知识
  • 1、Django Admin学习模型
  • yolov8目标检测pyside6可视化图形界面+检测源码ui文件——用于计数统计
  • Elasticsearch:使用 LTR 进行个性化搜索
  • Redis String 类型详解:操作命令、底层编码与使用案例
  • 当采用 JSON 格式的数据进行响应时,对象是否需要序列化取决于什么?
  • 【赵渝强老师】MongoDB的WiredTiger存储引擎
  • 苹果系统(MacOS)资源管理器和终端的来回切换
  • Centos7通过reposync搭建本地Yum源
  • 非局部均值降噪算法(NLM)原理及实现
  • 冒泡排序;选择排序;插入排序;快排;判断大小端;位运算
  • 【C++算法】分治(快排 归并)
  • 中国各城市、各区县、各省份-PM2.5相关数据(1998-2021年)
  • @angular/forms 源码解析之双向绑定
  • android 一些 utils
  • CAP 一致性协议及应用解析
  • CSS实用技巧
  • LintCode 31. partitionArray 数组划分
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 手写一个CommonJS打包工具(一)
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 移动端解决方案学习记录
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 《天龙八部3D》Unity技术方案揭秘
  • 1.Ext JS 建立web开发工程
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​ArcGIS Pro 如何批量删除字段
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • !!java web学习笔记(一到五)
  • (1)常见O(n^2)排序算法解析
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (AngularJS)Angular 控制器之间通信初探
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (十六)视图变换 正交投影 透视投影
  • (文章复现)基于主从博弈的售电商多元零售套餐设计与多级市场购电策略
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转)拼包函数及网络封包的异常处理(含代码)
  • ******IT公司面试题汇总+优秀技术博客汇总
  • ../depcomp: line 571: exec: g++: not found
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • .NET开源、简单、实用的数据库文档生成工具
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • @Transactional 参数详解
  • []Telit UC864E 拨号上网
  • [AI StoryDiffusion] 创造神奇故事,AI漫画大乱斗!
  • [Android]RecyclerView添加HeaderView出现宽度问题
  • [BZOJ] 2427: [HAOI2010]软件安装
  • [C#]扩展方法
  • [CC2642R1][VSCODE+Embedded IDE+IAR Build+Cortex-Debug] TI CC2642R1基于VsCode的开发环境
  • [CISCN2019 华东南赛区]Web11