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++中复杂地址解析及字符串初始化字符数组的小细节

关于这道题? 求出打印出的是什么

const char *c[] = {"HELLO", "NEW", "WORLD", "SAYHI"};
const char **cp[] = {c + 3, c + 2, c + 1, c};
const char ***cpp = cp; ?这里就是cp和cpp完全相等 ?cpp指向cp第一项
printf("%s,", **++cpp); ?结束后cpp指向cp第二项
printf("%s,", *--*++cpp + 3); ?结束后cpp指向cp第三项
printf("%s,", *cpp[-2] + 3); ?cpp指向cp第三项
printf("%s\n", cpp[-1][-1] + 1); ?cpp指向cp第三项


c是一个指针数组 ?所以c[0]取出来是HELLO的指针,那么c[0][0]就是H
c = {指向HELLO的指针,指向NEW的指针,指向WORLD的指针,指向SAYHI的指针};
c+3是什么呢,c是c数组中第一项的地址,那么c+3就可以理解为是c数组的第四项就是SAYHI的地址
cpp是一个最终指向char的二级指针数组,就是说cp数组里放的都是二级指针,毕竟c是char数组指针的指针


**++cpp ?刚开始cpp是cp第一项的地址,可以知道++cpp就是c+2的地址,c+2又是c数组中第三项的地址,那么解一层拿到c数组中第三项的地址,再解一层拿到c数组中第三项WORLD
*--*++cpp + 3 ? 因为在之前cpp已经增过了,所以这里++cpp就是c+1的地址,解一层拿到c+1也就是c数组中第二项的地址
这时候地址--就变成c数组中第一项的地址,解一层拿到c数组中的第一项HELLO数组的地址,这时+3地址变化指向第二个L所以输出是LO
*cpp[-2] + 3 ?cpp[-2]现在就是cp第一项c+3,c+3就是c第四项SAYHI的地址,解一层拿到SAYHI数组的地址,+3所以输出HI
cpp[-1][-1] + 1 ? cpp[-1]现在就是cp的第二项c+2,也就是c数组中第三项的地址,现在再来个[-1]就是这个地址-1然后解地址,解出来就是数组NEW的地址,+1输出EW
?

关于符串初始化字符数组的小细节

字符串结束标志\0 ?字符数组没有这个强制要求?
但用字符串初始化字符数组定义的时候,数组最后一个元素自动为\0
char str1[] = "str1"; ?sizeof(str1) = 5?
但是如果你用字符以下方这种方式初始化字符数组的时候最后一个不会为\0 ?可以编译通过
char str2[] = {'s', 't', 'r', '1'};
啊但是,如果你直接cout<<str2会发现他会打出乱码 ?比如这种字:烫 ?因为没有找到\0结束
所以在用字符初始化时一定要手动加上最后一位为\0 像这个样子
char str2[] = {'s', 't', 'r', '1', '\0};
某些题说用字符初始化时\0是必须的,我觉得得说是为了程序正确才必须,而并不是编译必须

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-09-24 20:38:18  更:2022-09-24 20:42: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/23 9:55:02-

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