数组与指针的区别

Posted ZYVV

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组与指针的区别相关的知识,希望对你有一定的参考价值。

数组与指针的区别

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。

 

以上是关于数组与指针的区别的主要内容,如果未能解决你的问题,请参考以下文章

字符串数组与字符指针的区别

(C/C++)区别:数组与指针,指针与引用

数组与指针的区别

增加指针与增加指针指向的数组元素有啥区别?

c++指针数组与二维数组的最大区别

李连杰的二级指针,二级指针的用途,多级指针的定义使用,数组与指针的区别,void 类型指针,引用