++++++局部变量、全局变量及变量的存储类别++++====+++指针+++

news2024/11/26 15:49:14

局部变量、全局变量及变量的存储类别

局部变量与全局变量的基本概念

  1. 局部变量:在函数内部定义的变量称为局部变量,也称为内部变量。它们只在定义它们的函数内部有效,即只有在这个函数被调用时,局部变量才会被分配内存空间,函数执行完成后,局部变量所占用的内存空间会被释放。

  2. 全局变量:在函数外部定义的变量称为全局变量,也称为外部变量。全局变量的作用域是整个源程序,即从定义变量的位置开始到源文件结束。全局变量在程序的整个执行期间都占用内存中的存储单元,而不是仅在需要时才分配存储单元。

局部变量与全局变量的生存期与作用域

  1. 生存期

    • 局部变量的生存期是从函数被调用时开始,到函数执行完毕返回时结束。局部变量在函数调用时分配存储空间,函数结束时释放存储空间。
    • 全局变量的生存期是整个程序运行期间,从程序开始执行到程序结束。全局变量在程序开始执行前分配存储空间,程序结束时释放存储空间。
  2. 作用域

    • 局部变量的作用域是定义它的函数内部。在函数外部无法直接访问局部变量。
    • 全局变量的作用域是整个源程序。在程序的任何地方都可以直接访问全局变量。

代码示例

#include <stdio.h>

// 全局变量
int globalVar = 10;

void functionA() {
    // 局部变量
    int localVar = 20;
    
    printf("在functionA中,localVar = %d, globalVar = %d\n", localVar, globalVar);
}

int main() {
    // 在main函数中无法直接访问localVar,因为它是functionA的局部变量
    // 但可以访问globalVar,因为它是全局变量
    printf("在main中,globalVar = %d\n", globalVar);
    
    functionA(); // 调用functionA函数
    
    // 在main函数中依然可以访问globalVar
    printf("在main中,再次访问globalVar = %d\n", globalVar);
    
    return 0;
}

代码演示了全局变量和局部变量的区别。globalVar是全局变量,可以在整个程序中访问。而localVarfunctionA函数的局部变量,只能在functionA函数内部访问。在main函数中无法直接访问localVar

指针

1)指针的基本概念

指针是一个变量,其值为另一个变量的地址。换句话说,指针指向内存中的某个位置。

2)指针的运算(&,*),指针的基本运算

  • & 是取地址运算符,用于获取变量的地址。
  • * 是间接引用运算符(或称为解引用运算符),用于获取指针指向的值。
int x = 10;
int *ptr = &x; // ptr 是一个指向 int 的指针,其值为 x 的地址
printf("%p\n", (void*)ptr); // 输出 ptr 的值(地址),需要转换为 void* 来避免警告
printf("%d\n", *ptr); // 输出 ptr 指向的值,即 x 的值

3)指针与一维数组

在 C 语言中,数组名在大多数情况下被视为指向其第一个元素的指针。

int arr[] = {1, 2, 3, 4, 5};
int *p = arr; // p 指向 arr 的第一个元素
printf("%d\n", *(p+1)); // 输出 arr[1] 的值,即 2

4)指针与字符串

在 C 语言中,字符串通常是通过字符数组来表示的,但更常见的是使用字符指针来操作字符串(特别是当字符串是常量或来自外部源时)。

char str[] = "Hello"; // 字符数组
char *ptrStr = "World"; // 字符指针指向字符串常量
printf("%s\n", str); // 输出 "Hello"
printf("%s\n", ptrStr); // 输出 "World"

5)指针变量作函数的参数

函数可以接受指针作为参数,这使得函数能够修改其参数所指向的变量的值。

void increment(int *p) {
    (*p)++; // 增加 p 指向的值
}

int main() {
    int x = 5;
    increment(&x); // 传递 x 的地址给 increment 函数
    printf("%d\n", x); // 输出 6
    return 0;
}

例子中,increment 函数接受一个 int 指针作为参数,并增加该指针指向的值。在 main 函数中,我们传递了 x 的地址给 increment 函数,因此 x 的值在函数调用后被增加。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1832538.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从根源解决问题:构建体系化BOM管理机制与解决方案

BOM&#xff08;物料清单&#xff09;是设计与生产间的纽带&#xff0c;其准确及时对企业的竞争力至关重要。然而&#xff0c;维护BOM数据时&#xff0c;常遇到录入错误、信息孤岛及跨部门沟通障碍等难题&#xff0c;直接影响生产效率和成本。为此&#xff0c;道合顺将探讨确保…

「布道师系列文章」宝兰德徐清康解析 Kafka 和 AutoMQ 的监控

作者&#xff5c;北京宝兰德公司解决方案总监徐清康 01 前言 当我们使用一个软件的时候&#xff0c;经常都会问这个软件怎么监控、监控他的哪些指标&#xff1f;Kafka 的监控挺长时间都是一个老大难的问题&#xff0c;社区在监控方面一直没有投入太大的精力。如果要实现一…

MTANet: 多任务注意力网络,用于自动医学图像分割和分类| 文献速递-深度学习结合医疗影像疾病诊断与病灶分割

Title 题目 MTANet: Multi-Task Attention Network for Automatic Medical Image Segmentation and Classification MTANet: 多任务注意力网络&#xff0c;用于自动医学图像分割和分类 01 文献速递介绍 医学图像分割和分类是当前临床实践中的两个关键步骤&#xff0c;其准…

BRAVE:扩展视觉编码能力,推动视觉-语言模型发展

视觉-语言模型&#xff08;VLMs&#xff09;在理解和生成涉及视觉与文本的任务上取得了显著进展&#xff0c;它们在理解和生成结合视觉与文本信息的任务中扮演着重要角色。然而&#xff0c;这些模型的性能往往受限于其视觉编码器的能力。例如&#xff0c;现有的一些模型可能对某…

苹果Mac电脑遭恶意软件攻击 Mac第三方恶意软件删除不了

苹果Mac电脑一直以来都以安全性和稳定性著称&#xff0c;许多用户认为Mac电脑不会受到恶意软件的侵害&#xff0c;但事实上&#xff0c;Mac电脑也不是绝对安全的&#xff0c;近年来&#xff0c;有越来越多的恶意软件针对Mac电脑进行攻击&#xff0c;甚至有些恶意软件可以绕过苹…

MSPM0L1306——定时器

相关配置&#xff1a; #include "ti_msp_dl_config.h"int main(void) {SYSCFG_DL_init();//清除定时器中断标志NVIC_ClearPendingIRQ(TIMER_0_INST_INT_IRQN);//使能定时器中断NVIC_EnableIRQ(TIMER_0_INST_INT_IRQN);while (1) { } }//定时器…

Thinkpad系列产品进入Bios并设置U盘启动

Thinkpad系列产品&#xff0c;进入Bios并设置U盘启动&#xff0c;常用于以下场景&#xff1a; 1. 安装操作系统。 通过U盘启动盘&#xff0c;用户可以在电脑无法从硬盘启动或需要重装系统时&#xff0c;将操作系统安装到电脑中。这种方法简单且有效&#xff0c;节省了时间并方便…

Redis-数据结构-跳表详解

Redis概述 Redis-数据结构-跳表详解 跳表&#xff08;Skip List&#xff09;是一种基于并联的链表结构&#xff0c;用于在有序元素序列中快速查找元素的数据结构。 Redis 中广泛使用跳表来实现有序集合&#xff08;Sorted Set&#xff09;这一数据结构。 1.跳表的基本概念和…

1832javaERP管理系统之实践教学管理Myeclipse开发mysql数据库servlet结构java编程计算机网页项目

一、源码特点 java erp管理系统之实践教学管理是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助采用了servlet设计&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统采用web模式&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Mye…

早期发现,健康生活!第三届ZAODX世界肿瘤早筛大会圆满落幕!

2024年6月15日-16日&#xff0c;第三届ZAODX世界肿瘤早筛大会在雄安新区盛大开幕&#xff01;本次会议由河北雄安新区管理委员会公共服务局指导&#xff0c;第三届ZAODX世界肿瘤早筛大会组委会和早筛网主办&#xff0c;粤港澳大湾区精准医学研究院&#xff08;广州&#xff09;…

双绞线(网线)的制作与测试

实验目的 1、熟悉常用双绞线&#xff08;网线&#xff09;及其制作工具的使用&#xff1b; 2、掌握非屏蔽双绞线的直通线、交叉线的制作及连接方法&#xff1b; 3、掌握双绞线连通性的测试。 设备要求&#xff1a;RJ45压线钳&#xff0c;RJ45水晶头&#xff0c;UTP线缆&…

《跟我一起学“网络安全”》——安全设备

安全设备 一、安全设备–IDS IDS入侵检测 (1)什么是入侵检测&#xff1a; 入侵检测系统&#xff08;intrusion detection system&#xff0c;简称“IDS”&#xff09;是一种对网络传输进行即时监视&#xff0c;在发现可疑传输时发出警报或者采取主动反应措施的网络安全设备。…

50etf期权交易规则杠杆怎么计算?

今天带你了解50etf期权交易规则杠杆怎么计算&#xff1f;近年来&#xff0c;期权交易在股票市场中变得愈发流行&#xff0c;其中50ETF期权备受关注。作为一种金融衍生品&#xff0c;50ETF期权为投资者提供了更灵活的投资方式和更多的策略选择。 50etf期权交易规则杠杆怎么计算&…

Hi3861 OpenHarmony嵌入式应用入门--启动流程

目录 BootLoader的启动与运行 Hi3861 RiSC-V boot 启动文件介绍 Loaderboot 启动过程 Flashboot代码介绍 printf串口配置 内核启动任务 BootLoader的启动与运行 Hi3861 RiSC-V boot 启动文件介绍 - Hi3861 的引导程序分为两部分&#xff0c;一部分是在芯片出厂时已经固…

谷歌插件将网页转图片

将网页转换为图片并保存 /*** 给网页转换为图片上传到FTP* param ftpUtils FTP连接对象* param pdfid 上传业务对象* param type 网页类型 1 审核表 2 合同 3 申请书* return https://registry.npmmirror.com/binary.html?pathchromedriver/*/private boolean htmlToImgFtp(Ft…

汇聚荣拼多多运营策略是怎么样的?

拼多多作为中国领先的电商平台&#xff0c;其运营策略一直备受关注。拼多多的成功不仅在于其创新的“社交电商”模式&#xff0c;更在于其精细化的市场定位和高效的用户增长策略。本文将深入分析拼多多的运营策略&#xff0c;探讨其如何在激烈的电商竞争中突围而出。 一、用户增…

人民日报:高考填志愿十问十答,填报志愿时需要考虑哪些因素?

高考结束&#xff0c;志愿填报即将开始&#xff0c;填报志愿时需要考虑哪些因素&#xff1f;如何避免高分低录甚至落榜&#xff1f;高考填志愿你需要知道的事↓↓ 祝福考生考入理想大学、就读喜欢的专业。加油&#xff01; 责任编辑&#xff1a;曹继炜

初级篇-Docker容器知识

Docker容器 容器主要是解决跨平台、跨服务运行环境的问题 容器将运行业务应用所需要的东西进行打包&#xff0c;包括依赖项、配置、脚本、二进制文件等。在容器中运行镜像&#xff0c;不用担心不同环境下运行不一致的问题。 容器本质上是一个特殊的进程&#xff0c;将资源、…

Golang内存模型与分配机制

简述 mheap为堆&#xff0c;堆和进程是一对一的&#xff1b;mcentral&#xff08;小mheadp&#xff09;&#xff0c;mcahe&#xff08;GMP的P私有&#xff09;&#xff0c;分配内存顺序由后向前。 在解决这个问题&#xff0c;Golang 在堆 mheap 之上&#xff0c;依次细化粒度&a…

SQL注入-上篇

SQL注入 注入是web安全的头号大敌。注入攻击漏洞往往是应用程序缺少对输入进行安全性检查所引起的。攻击者把一些包含攻击代码当做命令或者查询语句发送给解释器&#xff0c;这些恶意数据可以欺骗解释器&#xff0c;从而执行计划外的命令或者未授权访问数据。注入漏洞通常能sq…