zoukankan      html  css  js  c++  java
  • 数组与指针的区别

    数组与指针的区别

    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("
     : %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。

  • 相关阅读:
    环境搭建:Vue环境搭建和项目初始化(windows)
    文件扩展关联命令
    关闭任务栏上右键的打开历史记录
    CDN基本原理和功能浅析
    制作支持UEFI启动的原装系统安装盘
    文件被占用如何查看
    BIOS和CMOS的区别
    PKI公钥基础设施简介
    网络安全通信https工作原理
    常见加密算法简介
  • 原文地址:https://www.cnblogs.com/wlzy/p/5897906.html
Copyright © 2011-2022 走看看