C++中关于复杂的多维数组声明的总结
来源:互联网 发布:淘宝买号 编辑:程序博客网 时间:2024/06/05 00:45
最近在读c++ primer,多维数组的声明这里感觉有点绕,特意记个笔记
#include "stdafx.h"#include <iostream>using namespace std;int _tmain(int argc, _TCHAR* argv[]){ char word1[][20] = {"word1","word2"};//一个“二维数组”,等价于一个指向【由20个char组成的数组】的指针,20必须填,前面的可以不填,由编译器补全 char (*word2)[20] ; //一个指向【由20个char组成的数组】的指针,20必须填 char *word3[20] = {"word1","word2"}; //一个由20个char型指针组成的数组,20不填也可以,不填的话由编译器补全 char **word4 ; //一个指向char*型指针的指针 word2 = word1; word4 = word3; cout << word1[1] << endl; //word1[1]为char*类型,准确的说是char [20]类型 cout << word2[0] << endl; //word2[0]为char*类型,准确的说是char [20]类型 cout << word3[1] << endl; //word3[1]为char*类型,char*指向数据的宽度由编译器自动补全,word3的容量为20 cout << word4[1] << endl; //和上面一行原理完全相同 cout << sizeof(word1[0]) << endl; //输出结果为20,证明了word1 为 char[20] 类型 cout << sizeof(word3[0]) << endl; //输出结果为4,证明了word3是一个指针 /*实际上,word1和word2完全等价,word3和word4完全等价 word[]在声明中,就等于(*word)。因为C++中数组的底层实现就是指针。 C++中没有真正的多维数组,多维数组实际上是“数组的数组”(C++ Primer 第五版的原话) [const_expr]和*都是type的一部分,即使[]内不填东西,也要由编译器补全。用sizeof测试得出的结论是,测试[const_expr]类得出的字节长度,是(base type的长度)*(const_expr)。而*类的结果是4,也就是windows下指针的字节长度。 []操作符的优先级大于*,所以不难理解,为什么word1和word2完全等价,word3和word4完全等价 */ system ("pause"); return 0; /*还有一点需要注意的是,尽管数组在底层的实现方式就是指针,但是初始化一个数组的时候 例如 char word1[][20] = {"word1","word2"}; 实际上开辟了一块新内存,因此我们可以对数组中的值进行修改。 但是 char *word3[20] = {"word1","word2"}; 这样的声明,则是将指针指向了字符串常量,我们不能对指针所指的常量进行修改。*/}
0 0
- C++中关于复杂的多维数组声明的总结
- c的复杂声明
- 复杂的c声明
- 理解c中复杂的声明语法
- typedef:C 中复杂的函数声明
- typedef C 中复杂的函数声明
- c语言中复杂声明的解析
- C#.NET常见问题(FAQ)-如何声明list的多维数组
- C语言中多维数组的理解
- C语言中多维数组的理解
- C语言中多维数组的理解
- 【C++】【入门学习】理解复杂的数组声明
- C++多维数组的声明和使用
- C复杂的函数声明
- C语言的复杂声明
- 复杂的C 语言声明
- C复杂的函数声明
- C/C++ 复杂的声明
- eclipse为SSH框架.xml文件添加自动提示功能
- c++之封装——string类型的实现
- github的一点基本操作
- HDOJ 3537 Daizhenyang's Coin
- 面向对象的特征有哪些方面
- C++中关于复杂的多维数组声明的总结
- C++中的“流”和fstream类的一点总结
- 前端面试题整理
- webpack(一)安装
- 简单电话本实现
- windows下配置React Native开发环境
- Java中Collection和Collections的区别
- 国内一线互联网公司内部面试题库(转)
- 修改注释模板