汉扬编程 编程大纲 (语言变量的存储特效分几类)C语言定义的变量有哪些?分别存储几个字节?

(语言变量的存储特效分几类)C语言定义的变量有哪些?分别存储几个字节?

你好,一个八年C语言编程经验的工程师来回答你的提问,关于C语言定义的变量有哪些?分别存储几个字节?根据我的经验,回答如下:

(语言变量的存储特效分几类)C语言定义的变量有哪些?分别存储几个字节?

首先,考虑不同硬件平台的特性问题

(语言变量的存储特效分几类)C语言定义的变量有哪些?分别存储几个字节?

可以说C语言是一门跨平台可编译的编程语言,同一段代码,只要对应的硬件平台有编译器的支持,就可以编译运行,所以我们在说C语言的变量类型和存储空间时首先要考虑平台的差异,比如我们8位的单片机80C51,16位的Intel 8086处理器,我们的32位的ARM和PowerPc,或者DSP芯片,再比如我们常见的64位MIPS处理器,它们有不同的指令集,编译器,还有支持的位数,同一个C语言的类型,在不同处理器上可能占有的空间不一样,所以我以下回答拿最常见的32位处理器为例说明。

(语言变量的存储特效分几类)C语言定义的变量有哪些?分别存储几个字节?

其次,关于C语言常用变量类型

C语言中变量的类型基本分为:整型,浮点型,字符型,数组,结构体,枚举和联合体等,下面分类说明:

1、整型变量

一般整型变量 就是我们经常写的int型,整型变量又分为短整型short int 。由于符号的加入,又分为有符号和无符号之分。所以总结如下:

无符号整型 unsigned int

有符号整型 (signed) int

无符号半整型 unsigned short (int)

有符号半整型 (signed) short (int)

括号内部分可省略

2、浮点型

有单精度和双精度之分:

单精度 float

双精度 double

3、字符型

按有无符号:

有符号 (signed) char

无符号 unsigned char

4、数组

按纬度分

一维数组 type Buffer[ ]

二维数组 type Buffer[ ][ ]

多维数组 type Buffer[ ][ ]……[ ]

5、结构体

struct name

{

type1 value1;

type2 value2;

……

typen valuen;

}

6、枚举

enum name

{

name1,

name2,

……

namen

}

7、联合体

union name

{

value1 ,

value2,

……

valuen

}

然后,关于不同类型存储字节数

32位处理器前提下

整型:4字节

短整型:2字节

字符型:1字节

数组: 类型字节数*数组元素个数

结构体:结构体内所有元素空间和

备注:考虑编译器对于结构体的字节对齐操作,可使用#pragma pack(n)预编译指令,对齐结构体,然后计算

枚举:4字节

联合体:体内最大元素所占空间

最后,动态获取变量大小

如果不确定当前硬件平台,指定变量的占用空间情况,可使用sizeof关键字进行计算,比如sizeof(int),会计算出占用字节数,括号可省略。

以上回答是我个人的经验总结,纯手工敲键盘打出来的,希望对你有帮助。

喜欢可以点赞,关注哦。

c语言的变量说明哪个是正确的?

C语言变量的声明与定义

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$

本文来自网络,不代表汉扬编程立场,转载请注明出处:http://www.hyzlch.com/mianfei/7093.html

若a=2,c=4 A=30,则三角形ABC面积是?

c语言变量的定义和声明有什么不同?

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

返回顶部