首页 > 代码库 > 数组与指针的区别
数组与指针的区别
数组与指针的区别
1.数组与指针的定义
指针是变量,存储的是一个地址,用来间接访问数据,在32位系统下占用4个字节。指针可以指向任何内存空间,但不是任何内存空间都可以通过指针去访问(不能访问寄存器)。
数组是标识符且不占用存储空间,类似于常量,因此数组名不能作为左值。
short *sz[4]; //大小为4的一维数组,元素是指针short (*sz1)[4]; //指向数组的指针
2.extern数组与指针
先看这一段代码:
/* * d.c * Created on: * Author: zy */#include "apue.h"int a[] = {1,2};void hello(){ printf("d.c %d",a);}
#include "apue.h"extern void hello();extern int *a;int main(void){ hello(); printf("\n : %d",a); return EXIT_SUCCESS;}
上面的代码的输出为
d.c 134520856
: 1
第一行代码是第一个文件d.c输出了int a[];a的内容
第二行代码是第二个文件hello.c输出了extern int *a;指针a的内容
gcc编译的时候,在链接阶段了,hello.o有extern a符号,在d.o中找到,所以extern a 和d.o的a是同一个符号(我认为称他们“指向相同”有歧义)
也可以用图像表示。
数组第一项在内存地址134520856处。
第一个文件d.c将a当成数组来处理,可以按照想象的进行输出,但是
但是第二个文件是把符号a当成指针来操作的(因为 extern int *a), 指针所在的地址是134520856,但是指针的值是3。
数组与指针的区别
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。