📜  C语言中的变量和关键字

📅  最后修改于: 2021-05-25 20:34:32             🧑  作者: Mango

简单来说,变量是一个存储空间,已为其分配了一些内存。基本上,一个变量用于存储某种形式的数据。不同类型的变量需要不同数量的内存,并且具有可应用于其上的某些特定操作集。

变量声明:
典型的变量声明的形式为:

type variable_name;
    or for multiple variables:
  type variable1_name, variable2_name, variable3_name;

变量名称可以由字母(大写和小写),数字和下划线’_’字符。但是,名称不能以数字开头。

差异黑白变量声明和定义
变量声明是指在首次使用变量之前首先声明或引入变量的部分。变量定义是为变量分配存储位置和值的部分。在大多数情况下,变量声明和定义是一起完成的。

请参阅以下C程序以获得更好的说明:

C
#include 
int main()
{
    // declaration and definition of variable 'a123'
    char a123 = 'a';
 
    // This is also both declaration and definition as 'b' is allocated
    // memory and assigned some garbage value.  
    float b; 
 
    // multiple declarations and definitions
    int _c, _d45, e;
 
    // Let us print a variable
    printf("%c \n", a123);
 
    return 0;
}


C
#include 
void function() {
  int x = 10; // local variable
}
 
int main()
{
  function();
}


C
#include 
int x = 20;//global variable
void function1()
{
  printf("%d\n" , x);
}
void function2()
{
  printf("%d\n" , x);
}
int main() {
 
  function1();
  function2();
    return 0;
}


C
#include 
void function(){ 
int x = 20;//local variable 
static int y = 30;//static variable 
x = x + 10; 
y = y + 10; 
printf("\n%d,%d",x,y); 
} 
int main() {
 
  function();
  function();
  function();
  return 0;
}


C
#include 
void function()
{
  int x=10;//local variable (also automatic) 
  auto int y=20;//automatic variable
}
int main() {
 
    function();
    return 0;
}


C
#include 
 
// declaring and initializing an extern variable
extern int x = 9;
 
// declaring and initializing a global variable
// simply int z; would have initialized z with
// the default value of a global variable which is 0
int z=10;
 
// using typedef to give a short name to long long int
// very convenient to use now due to the short name
typedef long long int LL;
 
// function which prints square of a no. and which has void as its
// return data type
void calSquare(int arg)
{
    printf("The square of %d is %d\n",arg,arg*arg);
}
 
// Here void means function main takes no parameters
int main(void)
{
    // declaring a constant variable, its value cannot be modified
    const int a = 32;
 
    // declaring a  char variable
    char b = 'G';
 
    // telling the compiler that the variable z is an extern variable
    // and has been defined elsewhere (above the main function)
    extern int z;
 
    LL c = 1000000;
 
    printf("Hello World!\n");
 
    // printing the above variables
    printf("This is the value of the constant variable 'a': %d\n",a);
    printf("'b' is a char variable. Its value is %c\n",b);
    printf("'c' is a long long int variable. Its value is %lld\n",c);
    printf("These are the values of the extern variables 'x' and 'z'"
    " respectively: %d and %d\n",x,z);
 
    // value of extern variable x modified
    x=2;
 
    // value of extern variable z modified
    z=5;
 
    // printing the modified values of extern variables 'x' and 'z'
    printf("These are the modified values of the extern variables"
    " 'x' and 'z' respectively: %d and %d\n",x,z);
 
    // using a static variable
    printf("The value of static variable 'y' is NOT initialized to 5 after the "
            "first iteration! See for yourself :)\n");
 
    while (x > 0)
    {
        static int y = 5;
        y++;
        // printing value at each iteration
        printf("The value of y is %d\n",y);
        x--;
    }
 
    // print square of 5
    calSquare(5);
 
    printf("Bye! See you soon. :)\n");
 
    return 0;
}


输出:

a

是否可以有单独的声明和定义?
在外部变量和函数的情况下是可能的。有关更多详细信息,请参见此问题1。

定义变量的规则

  1. 变量可以包含字母,数字和下划线。
  2. 变量名可以以字母开头,并且只能使用下划线。它不能以数字开头。
  3. 变量名称中不允许使用空格。
  4. 变量名不得为任何保留字或关键字,例如int,goto等。

C中变量的类型
1.局部变量
在函数或块中声明和使用的变量称为局部变量。
它的范围仅限于函数或块。不能在块外使用。需要局部变量
在使用前进行初始化。

例子 –

C

#include 
void function() {
  int x = 10; // local variable
}
 
int main()
{
  function();
}

在上面的代码中x只能在函数()的范围内使用。在主函数使用它会产生错误。

2.全局变量
在函数或块外部声明的变量称为全局变量。
在程序开始时声明。它可用于所有功能。

例子 –

C

#include 
int x = 20;//global variable
void function1()
{
  printf("%d\n" , x);
}
void function2()
{
  printf("%d\n" , x);
}
int main() {
 
  function1();
  function2();
    return 0;
}
输出
20
20

在上面的代码中,两个函数都可以使用全局变量x,因为我们已经可以使用所有函数访问全局变量了。

3.静态变量
在多个函数调用之间保留其值的变量称为静态变量。
它用static关键字声明。

例子-

C

#include 
void function(){ 
int x = 20;//local variable 
static int y = 30;//static variable 
x = x + 10; 
y = y + 10; 
printf("\n%d,%d",x,y); 
} 
int main() {
 
  function();
  function();
  function();
  return 0;
}
输出
30,40
30,50
30,60

在上面的示例中,无论何时函数,局部变量将始终输出相同的值,而静态变量将在每次函数调用中输出递增的值。

4.自动变数
默认情况下,在块内声明的C语言中的所有变量均为自动变量。我们
可以使用auto关键字显式声明一个自动变量。
局部变量。

例子 –

C

#include 
void function()
{
  int x=10;//local variable (also automatic) 
  auto int y=20;//automatic variable
}
int main() {
 
    function();
    return 0;
}

在上面的示例中,x和y都是自动变量。唯一的区别是变量y是使用auto关键字显式声明的。

5.外部变量
外部变量可以在多个C文件之间共享。我们可以使用extern关键字声明外部变量。

例子:

myfile.h

  extern int x=10;//external variable (also global)  

   
  program1.c
  #include "myfile.h"  
  #include   
  void printValue(){  
  printf("Global variable: %d", global_variable);  
  }

在上面的示例中,x是在多个文件中使用的外部变量。

关键字是C中的特定保留字,每个保留字都具有与之关联的特定功能。几乎所有可以帮助我们使用C语言功能的单词都包含在关键字列表中。因此,您可以想象关键字列表将不会很小!

C中总共有44个关键字(C89 – 32,C99 – 5,C11 – 7):

auto        extern        short        while
break        float        signed        _Alignas
case        for        sizeof        _Alignof
char        goto        static        _Atomic
const        if        struct        _Bool
continue    inline        switch        _Complex
default     int        typedef        _Generic
do         long        union        _Imaginary
double         register    unsigned    _Noreturn
else         restrict    void        _Static_assert
enum         return        volatile    _Thread_local

这些关键字中的大多数已经在C语言的各个小节中进行了讨论,例如数据类型,存储类,控制语句,函数等。

让我们讨论其他一些关键字,这些关键字使我们能够使用C的基本功能:

const :const可用于声明常量变量。常量变量是在初始化后无法更改其值的变量。换句话说,不能在程序中进一步修改分配给它们的值。
句法:

const data_type var_name = var_value;

注意:常量变量必须在其声明期间进行初始化。 const关键字也与指针一起使用。请参阅C中的const限定词以了解相同内容。

extern :extern只是告诉我们该变量是在其他位置定义的,而不是在使用该变量的同一个块中定义的。基本上,该值是在另一个块中分配给它的,也可以在另一个块中对其进行覆盖/更改。因此,extern变量不过是一个全局变量,该变量在声明有合法值的情况下进行了初始化,以便在其他地方使用。可以在任何函数/块中访问它。同样,也可以通过在任何函数/块的声明/定义之前将“ extern”关键字放置在普通全局变量中,将其设置为外部变量。这基本上表示我们不是在初始化新变量,而是仅在使用/访问全局变量。使用外部变量的主要目的是可以在属于大型程序的两个不同文件之间访问它们。
句法:

extern data_type var_name = var_value;

static :static关键字用于声明静态变量,该变量在用C语言编写程序时经常使用。静态变量具有保留其值的属性,即使它们超出其范围也是如此!因此,静态变量在其范围内保留了其最后一次使用的值。因此,我们可以说它们仅被初始化一次,并且一直存在到程序终止为止。因此,没有分配新的内存,因为它们没有被重新声明。它们的范围对于定义它们的函数是局部的。全局静态变量可以在该文件内的任何位置访问,因为它们的作用域对于文件而言是本地的。默认情况下,编译器将它们分配为值0。
句法:

static data_type var_name = var_value;

void :void是一种特殊的数据类型。但是什么使它如此特别呢?从字面上看,void是一个空数据类型。这意味着它一无所有或不具有任何价值。例如,当将其用作函数的返回数据类型时,它仅表示该函数返回任何值。类似地,当将其添加到函数标题时,它表示该函数接受任何参数。
注意:void在指针方面也有重要的用途。请参阅C中的void指针以了解它们。

typedef :typedef用于为已经存在的甚至是自定义数据类型(如结构)赋予新名称。有时它非常方便,例如,当您定义的结构的名称很长,或者您只需要现有数据类型的简写形式时。

让我们实现上面已经讨论过的关键字。请看下面的代码,它是一个演示这些关键字的有效示例:

C

#include 
 
// declaring and initializing an extern variable
extern int x = 9;
 
// declaring and initializing a global variable
// simply int z; would have initialized z with
// the default value of a global variable which is 0
int z=10;
 
// using typedef to give a short name to long long int
// very convenient to use now due to the short name
typedef long long int LL;
 
// function which prints square of a no. and which has void as its
// return data type
void calSquare(int arg)
{
    printf("The square of %d is %d\n",arg,arg*arg);
}
 
// Here void means function main takes no parameters
int main(void)
{
    // declaring a constant variable, its value cannot be modified
    const int a = 32;
 
    // declaring a  char variable
    char b = 'G';
 
    // telling the compiler that the variable z is an extern variable
    // and has been defined elsewhere (above the main function)
    extern int z;
 
    LL c = 1000000;
 
    printf("Hello World!\n");
 
    // printing the above variables
    printf("This is the value of the constant variable 'a': %d\n",a);
    printf("'b' is a char variable. Its value is %c\n",b);
    printf("'c' is a long long int variable. Its value is %lld\n",c);
    printf("These are the values of the extern variables 'x' and 'z'"
    " respectively: %d and %d\n",x,z);
 
    // value of extern variable x modified
    x=2;
 
    // value of extern variable z modified
    z=5;
 
    // printing the modified values of extern variables 'x' and 'z'
    printf("These are the modified values of the extern variables"
    " 'x' and 'z' respectively: %d and %d\n",x,z);
 
    // using a static variable
    printf("The value of static variable 'y' is NOT initialized to 5 after the "
            "first iteration! See for yourself :)\n");
 
    while (x > 0)
    {
        static int y = 5;
        y++;
        // printing value at each iteration
        printf("The value of y is %d\n",y);
        x--;
    }
 
    // print square of 5
    calSquare(5);
 
    printf("Bye! See you soon. :)\n");
 
    return 0;
}

输出:

Hello World
This is the value of the constant variable 'a': 32
'b' is a char variable. Its value is G
'c' is a long long int variable. Its value is 1000000
These are the values of the extern variables 'x' and 'z' respectively: 9 and 10
These are the modified values of the extern variables 'x' and 'z' respectively: 2 and 5
The value of static variable 'y' is NOT initialized to 5 after the first iteration! See for yourself :)
The value of y is 6
The value of y is 7
The square of 5 is 25
Bye! See you soon. :)
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。