`
lobin
  • 浏览: 430826 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

C: 第9章 变量

 
阅读更多

变量

在定义变量的时候,需要指定变量的数据类型。比如定义一个int整型变量:

int a = 1;

 

除了指定变量的数据类型,还可以对变量进行如下修饰

auto

static

extern

register

 

auto

auto是C语言中的一个关键字。用于修饰变量。这个修饰符在C11之前很少使用,但这个修饰符是变量定义时的默认修饰符。

 

如int i;等价于auto int i;

 

和int i;这种定义形式一样,auto int i;在函数内部定义的话,表示变量是一个局部变量。在函数外部定义的话,表示变量是一个全局变量。

 

auto修饰符在后面的语言规范中有新的定义。

 

auto a = "this is a string.";

 

static

static可以用于修饰变量和函数。static修饰的变量为静态变量,static修饰的函数为静态函数。

 

变量可以是全局的,也可以是局部的变量。由static修饰的全局变量为静态全局变量,由static修饰的局部变量为静态局部变量。

 

静态全局变量

 

静态局部变量

 

static变量的初始化

var_t* init2() 

{

  static var_t va = {

 .va_a = "test2.", 

 .va_b = 5, 

 .va_c = 100};

 

  return &va;

}

 

var_t* init2() 

{

  static var_t va;

 

  va.va_a = "test2."; 

  va.va_b = 5; 

  va.va_c = 100;

 

  return &va;

}

 

 

#include <stdio.h>

typedef struct 
{
  char* va_a;
  int va_b;
  long va_c;
} var_t;


var_t* init1() 
{
  var_t va = {
	  .va_a = "test1.", 
	  .va_b = 5, 
	  .va_c = 100};

  return &va;
}


var_t* init2() 
{
  static var_t va = {
	  .va_a = "test2.", 
	  .va_b = 5, 
	  .va_c = 100};

  return &va;
}

int main()
{
  var_t *va1 = NULL, *va2 = NULL;

  va1 = init1();
  printf("a:%s, b:%d, c: %ld\n", va1->va_a, va1->va_b, va1->va_c);
  va2 = init2();
  printf("a:%s, b:%d, c: %ld\n", va2->va_a, va2->va_b, va2->va_c);

  printf("a:%s, b:%d, c: %ld\n", va1->va_a, va1->va_b, va1->va_c);
  printf("a:%s, b:%d, c: %ld\n", va2->va_a, va2->va_b, va2->va_c);
  return 0;
}

这段程序编译的时候会产生一个告警:

 

warning: function returns address of local variable

告警产生的地方是init1函数返回的地方:return &va;可以看到这里的va是一个局部变量,将一个局部变量地址返回是不对的,这样做非常危险。

 

这段程序的特点是init2函数,它和init1的区别是va是一个静态变量,因为定义在函数内部,所以是静态局部变量。

_init2:

pushl%ebp

movl%esp, %ebp

movl$_va.2315, %eax

popl%ebp

 

ret

 

.section .rdata,"dr"

LC1:

.ascii "test.\0"

.data

.align 4

_va.2315:

.longLC1

.long5

 

.long100

 

静态函数

 

extern

 

register

 

局部变量

 

全局变量

 

静态变量

 

0
0
分享到:
评论

相关推荐

    程序逻辑与C语言:第9章 用户自己建立数据类型.ppt

    1. 先声明结构体类型,再定义该类型变量: ```c struct Student { int num; char name[20]; char sex; int age; float score; char addr[30]; }; struct Student student1, student2; ``` 2. 在声明类型的同时...

    SAS (统计分析软件)课件:第9章 数据步变量与变量属性控制.ppt

    第9章主要探讨了数据步变量与变量属性控制,这涉及到如何有效地管理和操作SAS数据集中的变量。以下是对这一章内容的详细解释: 1. **ARRAY语句**:ARRAY语句是SAS中用于定义数组的关键字,它允许用户将一组变量打包...

    C语言课件:第3章 最简单的C程序设计.ppt

    "C语言课件:第3章 最简单的C程序设计" 本节课程主要讲解了C语言的基本概念和简单的C程序设计。通过实例讲解了顺序程序设计的概念,包括温度单位的转换和计算存款利息等。 3.1 顺序程序设计举例 顺序程序设计是指...

    C语言程序设计:第九章 文件.ppt

    《C语言程序设计:第九章 文件》 在C语言中,文件是程序与外部存储设备交互的重要手段。文件被定义为一组数据的集合,这些数据存储在外设上,如硬盘,甚至包括像键盘这样的设备,当以文件形式处理时被称为设备文件...

    c语言课件(第一章 C语言基础、第二章 变量和数据类型、第三章 运算符...第十二章 结构)

    第九章“函数(下)”继续讲解函数的高级主题,如函数指针、递归函数、多参数函数以及函数的嵌套调用。函数是代码重用和模块化的重要工具,理解和熟练运用函数能够提高代码的可读性和可维护性。 第十章可能是关于...

    C语言课件:第9章 文件.ppt

    第9章主要讲解了C语言中的文件操作,包括文件的基本概念、文件指针类型、文件的打开与关闭、输入输出函数以及使用文件的关键点。 首先,文件是计算机系统中保存数据和程序的实体,通常具有唯一的名字,并存储在外存...

    C语言程序设计:第9章 数组.pdf

    《C语言程序设计:第9章 数组》 在C语言中,数组是一种非常重要的数据结构,它允许程序员存储和操作一组相同类型的元素。数组的基本概念是将具有相同数据类型的元素集合在一起,通过一个统一的数组名来表示,每个...

    C语言程序设计课件:第9章指针.ppt

    以下是对"第9章指针"这一主题的详细阐述: 1. 内存地址与变量地址: 在计算机内存中,每个变量都有一个唯一的地址,这个地址是其在内存中的位置,用以区分其他变量。当我们谈论一个变量的地址时,实际上是在谈论它...

    C语言程序设计:第9章 结构体与共用体.ppt

    本资源对C语言程序设计中的结构体和共用体进行了详细的讲解,涵盖了结构体的定义、结构体变量的定义、结构体型数组、结构体型指针、结构体与函数、共用体等知识点,为读者提供了系统的学习资源。

    信号与系统(第4版):第9章 系统的状态变量分析法.ppt

    《信号与系统(第4版)》第9章讲解了系统状态变量分析法,这是现代控制理论中的一个重要概念。状态变量分析法关注系统的内部动态,不仅适用于单输入单输出(SISO)系统,还特别适合多输入多输出(MIMO)系统以及非...

    C程序设计(第五版)课后答案-第九章

    第九章通常会深入讲解C语言中的指针概念,这是C语言的一个核心特性,也是许多编程难题的解决关键。在这一章,学生将学习如何有效地使用指针进行内存操作、数据结构的构建以及函数参数的传递。 1. **指针基础**: 在...

    C语言课件:第一章 C 语言概述 .ppt

    本章主要介绍了C语言的发展历程、特点以及程序的基本结构。C语言起源于1972年至1973年间的美国贝尔实验室,由Ken Thompson和Dennis Ritchie为了开发UNIX操作系统而设计。随着时间的推移,C语言逐渐标准化,K&R合著的...

    C语言课件(谭浩强):第九章 结构体与共用体.ppt

    1. 先定义结构体类型,再定义结构体变量: ```c struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }; struct student stu1, stu2; ``` 2. 定义结构体类型的同时...

    C语言程序设计教学课件:第9章 指针.ppt

    1. **指针与地址**:指针是C语言中的一种数据类型,它存储的是变量在内存中的地址。内存是一个线性的存储空间,由多个存储单元组成,每个单元都有一个唯一的地址。通过地址,我们可以找到并访问存储在该地址上的数据...

    C语讲义:第一章:程序流程控制

    《C语言讲义:第一章 程序流程控制》 在C语言中,程序流程控制是编程的基础,它决定了程序的执行顺序。本章节主要涵盖了if、switch以及for等基本控制语句,这些语句使得程序员能根据特定条件或循环需求来组织代码。...

    C程序语言课件:第9章 指针.ppt

    第9章《指针》在C程序语言课件中,正是围绕这一核心概念展开的详细介绍和探讨。 指针的概念是理解内存地址的一种抽象表达。在计算机系统中,内存被划分为多个存储单元,每个单元都拥有一个独特的地址标识,用于访问...

Global site tag (gtag.js) - Google Analytics