首页 > 其他分享 >c语言中的变量存储区域

c语言中的变量存储区域

时间:2024-10-06 14:00:49浏览次数:9  
标签:语言 存储 常量 str2 str1 char 变量

局部变量和函数参数通常存储在栈中。函数调用时,栈空间用于存储函数参数、返回地址和局部变量。

int func(const char *str1, char *str2, int count) 
{
  count++;
  printf("%s %s\n", str1, str2);
  return count;
}

在这个函数中,参数,局部变量都是存储在栈上的,等函数返回后,栈就会销毁,这些变量也会被释放,所以函数外访问不到他们

注意这里有两个参数是指针,表示是引用传递,但这并不意味这你就能修改他们,加上const关键字修饰参数(限制对变量的修改),可以保护这个变量不被修改,如果不加,你也要考虑到实际参数是否可以被修改,即实际参数是否是个常量

动态分配的内存(使用 malloc、calloc 等)存储在堆中。堆内存的生命周期是由程序员控制的。

char *p = malloc(2 * sizeof(char));
free(p);

p也是一个变量,但它并不存储在堆区中,它只是指向堆中分配的内存

全局/静态存储区

静态变量和全局变量存储在静态存储区,生命周期从程序开始到结束。

int global_v = 0; // 全局变量
void func()
{
  static local = 1; // 静态变量,只会初始化一次
}

常量区

字面量常量和一些常量数据存储在常量区。

  • 字符串字面量,比如"hello"
  • 使用 const 修饰的变量,比如const int a;
  • 编译时常量(如 #define 和 enum)

特殊

void func()
{
  char *str1 = "hello"; // 常量区
  char str2[] = "world"; // 栈
}

在上述这个例子中,str1和str2都是局部变量,但是str1指向的"hello"是存储在常量区的,str1这个指针指向他,str2是一个数组,"world"以数组的形式存储在栈上,即{'w', 'o', 'r', 'l', 'd', '\0'}这6个字节,函数返回后会被销毁

主要的原因还是,编译器对他们的解释不同吧,一个解释为字符串常量,一个解释为数组

标签:语言,存储,常量,str2,str1,char,变量
From: https://www.cnblogs.com/dylaris/p/18449024

相关文章

  • 1.变量and输入输出
    一、变量概念:变量本质上是一个装东西的盒子,只能存放一个值。1.变量的命名规则变量的名字由:字母,数字,下划线_组成,不能以数字开头,并且区分大小写。a_1=5_b2=102.变量的定义格式:变量名=值=赋值,==等于a=1b=3.14c="hhhh"3.变量的类型int整型,float浮点型,str字符......
  • 英璞来(imprai)LLMs企业级智能助理:让大语言模型应用触手可及
    在这个信息爆炸的时代,人工智能和大数据技术正在改变我们的生活。而随着大语言模型的广泛应用,如何快速、高效地将这些模型集成到各种应用场景中,成为了一个亟待面对的问题。今天,我们要向您介绍一款名为英璞来(imprai)的开箱即用的企业级智能助理平台,它能够让您轻松获得各种基于大语言......
  • 微调大语言模型——超详细步骤
    微调一个语言模型,其实就是在一个已经训练过的模型上,继续用新数据进行训练,帮助模型更好地理解和处理这个新的任务。可以把这个过程想象成教一个已经懂很多道理的人去解决新的问题。这个过程可以分为五个简单的步骤:加载预训练模型和新的数据集:先拿到一个已经训练过的模型,它已......
  • c语言实用小程序
    ASCII编码程序:#include<stdio.h>Intmain(void){charx=?(num);printf(“%c”,x);return0;}解码:charx=’?(字符即字母或标点)’;print(“%d”,x);~//*typesize.c--打印类型大小*/#include<stdio.h>intmain(void){/*C99为类型大小提供%zd转换说明*/pri......
  • c语言模拟实现qsort
    要想模拟首先qsort函数首先我们应该知道这个函数的功能是什么接下来我为大家引入一个列子我们想要实现一组有序数的升序可以通过冒泡排序法思想是 两两相邻元素进行比较 代码如下 通过冒泡排序法 #define_CRT_SECURE_NO_WARNINGS#include<stdio.h>voidbubbl......
  • 重新定义记忆:语言模型中的概念抹除
    在这个快速发展的AI时代,人们越来越关注如何让机器学习模型具备更好的道德和安全性。尤其是在语言模型(LanguageModels,LMs)方面,如何有效地抹除有害或敏感的概念知识,已成为一个令人瞩目的研究课题。本文将围绕RohitGandikota等人提出的“语言记忆抹除”(ErasureofLanguageM......
  • 【软考】4 存储系统
    1、层次化存储体系存储硬件:注意,Cache位于CPU和主存之间,不属于主存部分 存储分类方式: 例题:1、CPU访问存储器时,被访问数据一般聚集在一个较小的连续存储区域中。若一一个存储单元已被访问,则其邻近的存储单元有可能还要被访问,该特性被称为(A)。A、数据局部性B、指令局部性......
  • Python语言中程序运行错误和异常处理
    '''Python捕获异常:一旦发生异常,程序就会终止,这是非常糟糕的事情,这种糟糕体现在两方面1.即便发生了异常,业务上可以忽略它,那么程序应当继续执行2.程序终止,使得异常的信息没有被保留下来,不利于问题的分析和总结为了提高程序的健壮性和解决问题,可以将异常捕获,根据业务......
  • 如何给易语言软件加网络验证 永久免费的网络验证 文心云验证
    当我们自己幸幸苦苦编写了一个软件,又不想泛滥时,我们应该如何给软件添加一个授权呢我这边找了很久找到了一个方法 就是对接网络验证实现授权才能登录文心云验证是可以为开发的软件增加收费授权的功能,让作者开发的软件可以进行销售、充值、登陆等操作,并且提供防破验证功能,可以......
  • C语言初阶,猜数字游戏
    这是适合萌新练习的小程序,在了解了循环语句后可以实现game函数被调用后执行猜数字环节,直到猜对,也可以改变while的条件设置猜的次数  代码从这里开始,如果选择1则调用game函数  代码就分享到这里,谢谢大家!......