c语言中全局变量在不同文件中的引用

2023-05-16

c语言中全局变量在不同文件中的引用

c语言中在某个文件中定义的全局变量可以在不同的文件中引用,对数组和指针这两种全局变量在使用时必须要注意,外部引用格式不正确时会出现编译或运行错误。下面通过不同的例子来说明数组和指针类型全局变量的引用。
一、全局变量为数组

example1:

test1.c  
int a[10] = {1,2,3,4,5};  
 
test2.c  
#include <stdio.h>  
#include <stdlib.h>  
extern int a;  
int main()  
{  
    printf("%d\n", a[2]);  
    return 0;  
} 

编译时会出现下面错误,说明在test2中的extern引用的a实际上是一个变量,而不是一个数组,在第10行会出现编译错误。

error: subscripted value is neither array nor pointer  

example2:

test1.c:  
int a[10] = {1,2,3,4,5};  
 
test2.c:  
#include <stdio.h>  
#include <stdlib.h>  
extern int a[];  
int main()  
{  
    printf("%d\n", a[2]);  
    return 0;  
} 

此例编译和运行都没有任何问题,运行结果为3。说明extern引用的a就是在test1.c中定义的数组。

example3:

test1.c:  
int a[10] = {1,2,3,4,5};  
 
test2.c:  
#include <stdio.h>  
#include <stdlib.h>  
extern int *a;  
int main()  
{  
    printf("%d\n", a[2]);  
    return 0;  
} 

此例在编译时没有任何问题,但是运行时会出现野指针访问错误,因为此处a被认为是外部定义的一个指针变量,但是这个指针变量并没有指向某个对象,所以在运行过程中会出现随机访问内存的情况。
转发链接:https://blog.51cto.com/coldcloudy/970380

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c语言中全局变量在不同文件中的引用 的相关文章

  • 粒子群算法 PSO

    粒子群算法 粒子群算法 PSO 在PSO中 每个优化问题的潜在解都是搜索空间的一只鸟 xff0c 被称为粒子 xff0c 所有的粒子都有一个由适应度函数决定的适值 xff0c 每个粒子还有一个速度决定它们 飞行 的方向和距离 xff0c 然
  • SEATAdocker-compose部署

    docker compose 文件 span class token key atrule version span span class token punctuation span span class token string 39
  • docker-compose 部署ELK

    目录结构 docker compose 文件 span class token key atrule version span span class token punctuation span span class token strin
  • sleuth-zipkin springcloud

    docker compose文件 span class token key atrule zipkin span span class token punctuation span span class token key atrule i
  • 登录session_id用法以及如何验证账号和密码

    登录的时候 xff0c session start session id 61 session id 把 session id储存在本地 xff08 app储存在app xff0c 电脑用cookie储存 xff09 xff0c 再次请求的
  • 正点原子MiniFly Firmware V1.5开源四轴代码硬件部分分析2:motor.c。

    一些参考 xff1a 电机控制基础 定时器基础知识与PWM输出原理 知乎 zhihu com include 34 sys h 34 include 34 delay h 34 include 34 motors h 34 include
  • 使用百度地图POI爬取需要的数据

    目标 xff1a 爬取阿克苏地区内的所有医院数据 一 百度地图开放平台注册 xff0c 获取到AK xff08 1 xff09 在百度地图开放平台完成注册 这个平台是百度地图为开发者提供接口用的 xff0c 有很多其他的功能 xff0c 这
  • RT-Thread 笔记整理

    1 AI xff1a 从前例中学习 xff1b 传统 xff1a 基于经验 2 IOT xff08 internet of things xff09 设备 xff08 传感器将原始数据上传 xff09 gt Gateway网关 gt clo
  • Realsense

    使用说明 xff1a 1 组装拍摄三脚架与滑动条轨 xff0c 将RealSense相机与手机一同装置在三脚架的滑动条轨上 2 连接RealSense到笔记本电脑 xff0c 不需任何配置即可直接适配设备 3 打开PC端软件 xff0c 调
  • 变频器基础:变频器工作原理与常用功能

    参考文献 1 向晓汉 宋昕 变频器与步进 伺服驱动技术完全精通教程 M 第1版 北京 化学工业出版社 2015 2 王永华 现代电气控制及PLC应用技术 M 第5版 北京 北京航空航天大学出版社 2018 3 王兆安 刘进军 电力电子技术
  • 线性系统的矫正方法——PID控制理论学习笔记

    主要谈及直流电机的速度PID控制 xff0c 在智能车中还有方向PID控制 xff08 舵机调整方向 xff09 参考文献 1 胡寿松 自动控制原理 M 第六版 北京 科学出版社 2015 2 陈伯时 电力拖动自动控制系统 运动控制系统 M
  • Linux驱动的软件架构(一):驱动的软件设计模式理念

    这个内容是我观看 Linux设备驱动开发详解 的学习笔记 xff0c 其实书里面是先讲了关于驱动的很多的基础知识 xff0c 然后再讲驱动的软件架构 但是我最近深深地沉迷于自顶向下的学习逻辑 xff0c 所以打算先对整个驱动有了框架之后 x
  • java.lang.NoClassDefFoundError: com/jspsmart/upload/SmartUploadException

    问题描述 我在使用Smartupload上传图片的时候 xff0c 代码没问题 xff0c 编译也没有报错 xff0c 但是启动服务器 xff0c 便出现了java lang NoClassDefFoundError com jspsmar
  • datetime-local数据类型和Date数据类型转化(前端到后端,后端到前端)

    前端的datetime local传递到后端为Date类型 前端的input输入框 span class token tag span class token tag span class token punctuation lt span
  • Ubuntu18.04中LXC安装配置以及简单使用

    LXC安装配置 安装LXC sudo apt install lxc y 安装完毕之后 xff0c 默认的文件路径为 etc lxc 查看LXC版本 sudo lxc version 然后创建Ubuntu的LXC容器 t 指定模板 xff0
  • STM32 串口详解

    目录 01 USART的特点 02 USART简介 2 1 数据传输模型 2 2 帧结构 2 3 波特率 03 STM32的USART 04 代码配置 01 USART的特点 USART是通用异步收发传输器 xff08 UniversalA
  • Ubuntu18.04安装配置FRR

    FRR 文章描述了如何在Ubuntu18 04的环境下安装配置frr 0 更新安装源 vi etc apt sources list 更改文件内容 deb http mirrors aliyun com ubuntu bionic main
  • Ubuntu中安装配置JDK1.8

    JDK1 8安装配置 下载JDK 点击下载jdk 解压 将下载的压缩包解压到 opt目录下 span class token function tar span zxvf 下载的jdk压缩包名字 C opt 设置软链接 切换到 opt目录下
  • 使用Systemback制作Ubuntu20.04自定义系统镜像和系统备份

    为了方便我们自定义系统的镜像文件和系统下载的软件 xff0c 减轻再次部署的麻烦 xff0c 我们会制作镜像文件 本文就是利用Systemback来制作Ubuntu20 04自定义系统镜像和系统备份 查看网上的Systemback安装教程很

随机推荐

  • Key exchange was not finished, connection is closed.解决办法

    错误 利用java连接Linux服务器中碰到错误 xff1a Key exchange was not finished connection is closed xff0c 导致服务器的连接失败 xff0c 报错如下 原因 是ssh中的k
  • JAVA数据结构之顺序表、单向链表及双向链表的设计和API实现

    一 顺序表 顺序表在内存中是数组的形式存储 类名SequenceList构造方法SequenceList int capacity xff1a 创建容量为capacity的SequenceList对象成员方法1 public void cl
  • 单向链表快慢指针实际应用问题

    快慢指针 所谓快慢指针 xff1a 就是利用两个指针移动速度的不同来实现需求 xff0c 一般设置两个指针 xff0c 慢指针每次移动一格 xff0c 快指针每次移动两格 下面分享利用快慢指针解决中间值 链表环路以及环路入口的问题 中间值问
  • Caused by: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax 解决方法

    问题描述 Caused by java sql SQLSyntaxErrorException You have an error in your SQL syntax xff1b check the manual that corresp
  • 数组和JSON之间的格式转换

    数组和JSON之间的格式转换 主要代码 xff1a span class token keyword const span a span class token operator 61 span span class token const
  • Linux vncpasswd and passwd

    1 vncpasswd 功能 xff1a 使用vncpasswd命令可以创建或更改一个VNC的登录密码 xff0c 这将同时在用户的主目录下创建一个隐藏的目录 vnc xff0c 该目录内有一个文件passwd保存着VNC登录密码 语法 v
  • 修改运行中的docker容器的端口映射(简单、高效)

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言查看已经存在容器id关闭docker服务 xff0c 修改配置文件结束 xff0c 启动容器 前言 在docker run创
  • 人脸识别系列(十六):AMSoftmax

    论文链接 xff1a Additive Margin Softmax for Face Verification 2019 1 24 xff1a 注 xff1a 腾讯AI Lab的 CosFace Large Margin Cosine L
  • C语言:strtok()的用法。

    char strtok char str const char sep 1 sep参数是个字符串 xff0c 定义了用作分隔符的字符集合 xff1b 2 第一个参数指定一个字符串 xff0c 它包含了0个或者多个由sep字符串中一个或者多个
  • 日积月累

    目录 PYTHONUBUNTUTRACKINGNEURAL NETWORKMACHINE LEARNING PYTHON 有路径的地方要注意区别 和 ubuntu使用 分割文件夹 xff1b 对于别人的代码 xff0c 首先仔细阅读read
  • 19.RFID复习

    题型 填空题30分 xff08 一空一分 xff09 简答题30分 xff08 三道题 xff09 综合题40分 xff08 两道题 xff09 重点章节第一章 xff0c 第二章 xff08 见整理的练习题 xff09 xff0c 第四章
  • [Linux驱动]-----NAND FLASH

    一 NAND原理及硬件操作 C xff1a fopen xff0c fread xff0c fwrite APP open read write 1 txt 文件读写 文件系统 xff1a vfat ext2 ext3 yaffs xff0
  • sklearn中train_test_split里,参数stratify含义解析

    直接上代码 xff1a span class token keyword from span sklearn span class token punctuation span model selection span class toke
  • CentOS 7/8 预装的新型防火墙firewalld配置详解,

    前言 本文将会详细介绍CentOS 7 firewalld的来由 功能 常用命令 常用的案例及使用方法 希望能帮助读者全面了解firewalld xff0c 并能正确配置和使用它 centos7 firewalld firewalld与ip
  • webpack5常用配置

    该常用配置使用的npm包 xff1a span class token string property property 34 dependencies 34 span span class token operator span span
  • 【Linux】CentOS & Makefile

    目录 1 Ubuntu入门1 1 文件1 2 网络相关1 2 1 Linux网络相关概念和修改IP地址的方法IP信息临时修改ip地址NetworkManager修改主机名 1 2 2 关闭防火墙并设置开机开不启动firewalld临时和永久
  • HTTP请求报文(请求行、请求头、请求体)

    HTTP协议 1 简介 HTTP协议 xff08 Hyper Text Transfer Protocol xff0c 超文本传输协议 xff09 是用于从万维网 xff08 WWW World Wide Web xff09 服务器传输超文
  • Linux 下使用vscode调试C/C++程序记录

    Linux 下使用vscode调试C C 43 43 程序记录 本文主要介绍了 xff0c 在linux下使用vscode调试工程时的 xff0c 一些经验记录 基础配置 常用的配置方法网上的材料很多 xff0c 可以直接参照 链接 lin
  • 形状特征的提取

    物体和区域的形状是图像表达和图像检索中的另一重要的特征 但不同于颜色或纹理等底层特征 xff0c 形状特征的表达必须以对图像中物体或区域的划分为基础 由于当前的技术无法做到准确而鲁棒的自动图像分割 xff0c 图像检索中的形状特征只能用于某
  • c语言中全局变量在不同文件中的引用

    c语言中全局变量在不同文件中的引用 c语言中在某个文件中定义的全局变量可以在不同的文件中引用 xff0c 对数组和指针这两种全局变量在使用时必须要注意 xff0c 外部引用格式不正确时会出现编译或运行错误 下面通过不同的例子来说明数组和指针