第29课 指针和数组分析(下)
2021-07-14 10:05
标签:常量 .com 技术分享 情况 分享图片 alt 外部 解释 clu 数组名可以当做常量指针使用,那么指针是否也可以当做数组名来使用呢?
下标VS指针形式:
示例程序: 第11行将指针当做数组名来使用。 运行结果如下:
可以看到输出结果是正确的。 但是数组和指针是不同的。 示例程序: ext.c文件 当上述程序第5行为extern int a[];时,编译运行结果如下:
当第5行改为extern int *a;时,结果如下:
出现了段错误。 当编译ext.c的时候,在内存中出现了如下的情况,编译器在内存中分配20个字节:
编译器编译ext.c,分配了内存,给了a一个地址0x804a014。编译器将a这个标识符映射到了0x804a014这个地址值上面。在内存中是没有变量和标识符的,只有地址。 编译器在编译到主程序的第5行时,看到a是在外部定义的,那么就认为在外部,编译器已经给了它一个地址值了,第7行取a的地址值,自然得到了0x804a014。 编译到第8行时,a被解释为指针,a这个变量在编译器中分配的地址为0x804a014,这个地址其实对程序员是不可见的。而a的值并不是这个地址,而是这个地址中存放的值,因此,编译器会到0x804a014这个地址里面取四个字节,这四个字节就是a的值。 第29课 指针和数组分析(下) 标签:常量 .com 技术分享 情况 分享图片 alt 外部 解释 clu 原文地址:https://www.cnblogs.com/wanmeishenghuo/p/9538862.html 1 #include
1 #include
1 int a[] = {1, 2, 3, 4, 5};