C/C++小课之数组名是什么
我们今天讨论数组名是什么东西,理解它有助于我们进一步理解和使用指针。
因为它涉及到了内存地址。
问题
数组名是什么?含义是什么?
思路
前提
一个值+1之后的变化可以反映出它的意义/含义。
前提的证明
其实不证自明,计算机中就是这样的。
- 
生活中 一个苹果+1,结果是两个,增加了一个苹果。 一箱苹果+1,结果是两箱,个数是2*每箱苹果数,增加了一箱苹果。 
- 
计算机中 int型变量的地址+1,增加了一个int的大小。 double型变量的地址+1,增加了一个double的大小。 
思路
根据前提,通过将数组名或数组名相关的值+1来判断它的含义。
验证
编程中要了解一个东西,大多时候我们可以通过输出它来了解它。
代码
#include <iostream>
using namespace std;
int main()
{
    //注释指出array代表什么
	int array[5] = { 1,2,3,4,5 };
	printf("    &array[0] =  %p\n", &array[0]);		//首元素
	printf("        array =  %p\n", array);			//数组
	printf("      array+1 =  %p\n", array + 1);		//数组
	printf("  &array[0]+1 =  %p\n", &array[0] + 1);	//首元素
	printf("       &array =  %p\n", &array);	    //数组
	printf("     &array+1 =  %p\n", &array + 1);	//数组
	printf("sizeof(array) =  %zd\n", sizeof(array));//数组
}
为什么用printf不是cout?用cout其实也行,printf可能更方便,而且我忘了cout怎么控制位数了。
结果
    &array[0] =  0000002A433FF628
        array =  0000002A433FF628
      array+1 =  0000002A433FF62C
  &array[0]+1 =  0000002A433FF62C
       &array =  0000002A433FF628
     &array+1 =  0000002A433FF63C
sizeof(array) =  20
结论
数组名是什么,有什么含义
数组名是一个常量(所以不能被赋值),是一个地址。(&array中array并不是地址,因为地址是一个值,我们并不能取一个值的地址吧)
在不同情况下,有着不同的含义。
- 
代表整个数组 碰到 &、sizeof时,数组名代表整个数组,作用像是一个变量。
- 
代表数组首元素 数组名单独出现或碰到 []、*时,数组名代表数组第一个元素,是一个地址。(这个下次会讲)
知识点
IDE、编译器、编辑器
- 
编辑器 文本编辑器,比如notepad++,sublime。 
- 
编译器 处理我们写的代码。 C/C++的比如有:gcc,mingw。 计算机语言可以分为两种:编译语言和解释语言。 
- 
IDE Integrated Development Environment,集成开发环境。 集合了编辑器和编译器的功能,还有一些辅助开发的功能。 
Visual Studio
- 
解决方案 
- 
项目 
- 
调试 
- 
查看源码 比如看 sizeof、iostream,Ctrl+左键
- 
查看类图 右击(项目)-查看-查看类图 
十六进制
地址+1
核心在于单位。见下篇
sizeof
占用的字节数。基本数据类型、结构体(会字节对齐)。
- 
不同环境下(32位、64位等)某种类型的变量占用字节数可能是不同的 比如指针,32位下是4个字节,64位下是8个字节, 正好是对应计算机的字长。(后边有讲计算机字长是什么) 
- 
%zd、size_t
后边还有一篇
%p %x
两者有细微差别。
重视warning
VS的warning还是比较全的,其他IDE的waring不一定全。
如果写代码出了问题却找不到原因,有可能是warning给出的潜在问题没有处理。
写代码时遇到waring一定要处理,不然很容易出问题。
混合编程
C和C++还是不一样的。特别是函数的使用,如果要动态申请一个类对象的内存,可别用malloc,它和new还是不一样的。
一些重要名词
值
生活、编程中出现的数字、字符串、字符等等,都是值。
比如1,2,3,我爱你等等。
变量
变量算是对值的一个替代(或者说抽象)吧,提高复用性。
地址
地址是个值。
计算机有存储空间。我们将其一个个地编号,也就是给了它一个地址。
指针
指针是个变量。
跟普通变量其实没什么本质区别,只不过它被用来存储地址而已。
运算符优先级
* [] &的优先级?
计算机字长
字长:字的长度(位数)。
计算机中有字节这个单位。1个字节等于8位。
多个字节组成字。
我们平常说的电脑32位,64位指的就是字长。
作者:@臭咸鱼
本文为作者原创,转载请注明出处:https://www.cnblogs.com/chouxianyu/
欢迎讨论和交流!
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号