C语言变量的声明与定义

       跟同事讨论代码时,经常冒出声明一个变量、定义一个变量的话。虽然感觉没什么差别,但总是混淆不清,心里难受。查下资料,总结做个笔记总是没错的。

一:两者的定义

  • 变量定义

           用于为变量分配存储空间,还可为变量指定初始值。程序中,变量有且仅有一个定义。

  • 变量声明

           用于向程序表明变量的类型和名字,一个变量可以有多个声明。在C语言中,所有的变量都必须先声明后使用。可以用extern这个关键字来声明已经定义的变量。

二:两者的区别

  • 定义是特殊的声明,它为对象分配内存。声明没有分配内存,这是最大的区别。
  • 声明不一定是定义,定义一定包含声明。声明的变量名字已经匹配到一块内存上了,描述其他地方的创建的对象。
  • 一个变量只能定义一次,但可以多次声明。

三:代码演示

这边创建main.c、test.c、test.h三个文件进行演示。

main.c

#include<stdio.h>
#include "test.h"

/*
 * 声明变量d, 变量d在test.c里面定义,在这边或者test.h声明,
 * 才能在main.c里面调用。不声明的话,编译会失败,声明不分配内存。
 */
extern int d;

void main()
{
    int a = 10;  /* 定义且声明变量,同时进行初始化,系统有分配内存 */
    int b;       /* 定义且声明变量,但不进行初始化,系统有分配内存 */

    b = 20;
    printf("a = %d, b = %d\n", a, b);

    fun_test();
    printf("c = %d, d = %d\n", c, d);
}

test.c

#include<stdio.h>

int c = 30; /* 定义且声明变量,同时进行初始化,系统有分配内存 */
int d;      /* 定义且声明变量,但不进行初始化,系统有分配内存 */

void fun_test()
{
    d = 40;
    printf("hello test, c = %d, d = %d\n", c, d);
}

test.h

#ifndef TEST_H
#define TEST_H

extern int c;           /* 声明变量c, 系统没有分配内存 */
extern void fun_test(); /* 声明函数fun_test */

#endif

 

编译执行

laiguoliang@earth:~/test/extern$ ls
main  main.c  test.c  test.h
laiguoliang@earth:~/test/extern$ ./main
a = 10, b = 20
hello test, c = 30, d = 40
c = 30, d = 40
laiguoliang@earth:~/test/extern$

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值