⑴ 刚学习c语言,看不懂这个变量的概念,书上好像是说什么存储单元,请帮忙仔细介绍一下,谢谢
数据存储在存储单元 变量都有变量名 这个变量名相当于这个存储单元的名字 在程序中对这个变量赋值或者操作都相当于对存储单元操作。 比如有个变量操作地址为0xef4567df(瞎写的),当你想对这个地址进行操作时,直接用这个变量名即可 。其实,一般程序中不会在意某个变量的地址到底是什么,而这些变量的分配,系统也是有一定的机制的。另外,不同的变量占用不同长度的字节,比如char是1字节,int 是4字节
⑵ 在c语言中,变量名 地址 存储单元的内容 分别怎样储存
首先,在C语言中,存储器实际上是一个大的字节数组,字节数组中的每一个元素称为存储单元,基本的存储单元为字节。
其次,在C语言中,每一个存储单元占一个字节,每一个字节对应一个地址,这个地址即为内存地址。
再次,在C语言中,变量名是一个标识符,在C语言中标识符只能有数字、字母、下划线(_)组成,且第一个符号必须是字母或者下划线(_)。
最后,对于C语言中的变量来说,它具备两个基本的属性,一个是地址,一个是内容。正是因为此,所以在函数参数传递时有两种方法一种是传址,一种是传值 。比如下面的代码:
inta=2;//a是变量名,它有两个属性,一个是地址,一个是值。
int*p=&a;//使用取地址运算符&即可获取变量的地址
intb=a;//使用变量名可以取得变量的值
intc=*p;//使用间接引用运算符*也可以取得变量a的值。
⑶ C语言中有哪些存储类型
c语言中的存储类型有auto, extern, register, static 这四种,存储类型说明了该变量要在进程的哪一个段中分配内存空间,可以为变量分配内存存储空间的有数据区、BBS区、栈区、堆区。
1. auto存储类型
auto只能用来标识局部变量的存储类型,对于局部变量,auto是默认的存储类型,不需要显示的指定。因此,auto标识的变量存储在栈区中。
2. extern存储类型
extern用来声明在当前文件中引用在当前项目中的其它文件中定义的全局变量。如果全局变量未被初始化,那么将被存在BBS区中,且在编译时,自动将其值赋值为0,如果已经被初始化,那么就被存在数据区中。全局变量,不管是否被初始化,其生命周期都是整个程序运行过程中,为了节省内存空间,在当前文件中使用extern来声明其它文件中定义的全局变量时,就不会再为其分配内存空间。
3. register存储类型
声明为register的变量在由内存调入到CPU寄存器后,则常驻在CPU的寄存器中,因此访问register变量将在很大程度上提高效率,因为省去了变量由内存调入到寄存器过程中的好几个指令周期。
4. static存储类型
被声明为静态类型的变量,无论是全局的还是局部的,都存储在数据区中,其生命周期为整个程序,如果是静态局部变量,其作用域为一对{}内,如果是静态全局变量,其作用域为当前文件。静态变量如果没有被初始化,则自动初始化为0。静态变量只能够初始化一次。
⑷ c语言中存储单元的地址和存储单元的内容有什么区别
储存单元的地址是地址(指存的东西的位置),储存单元的内容是储存单元里的数据。
例如:储存单元的地址就是家的门牌号,储存单元的内容是家里的东西。
⑸ c语言中存储单元的地址和存储单元的内容有什么区别
存储单元的地址是一个指针类型的。
而存储单元的类型是数据的具体类型。
举个例子吧。
定义一个整型变量int a = 1;
那么存储单元的地址是&a,可以赋值给一个指向整型的指针:
int *p = &a;
而存储单元的值是数值1,如果是四个字节的话即是:
00000000 00000000 0000000 00000001.
通过指针p可以找到a的值,赋值给另一个变量。
int b = *p;
如果有很多盒子,每个放着一个苹果。
那么存储单元的地址就是盒子的编号,而存储单元的内容就是盒子里的苹果。
通过编号是可以找到相应的苹果的。
⑹ C语言中存储单元与位有什么不同吗
c语言最小存储单元是字节,1字节==8位。
⑺ 在c语言中静态存储单元与动态存储单元有什么区别
晒晒
静态的内存使用的是栈空间内存,不用程序员自己来分配.动态内存由程序员根据需要来自己分配并收回.
最大的区别在于动态的内存分配时候会用new关键字或malloc或calloc函数,之所以要程序员自己来分配内存是由于有时候不能确定程序要使用多少内存,比如要通过用户或者文件或者数据库中的查询结果来确定使用多少数据,这时候程序员无法在程序的编写的时候就把内存给固定分配出来.这时候必须得让程序在运行的时候自己来为自己找到可用的内存,就一定要用动态的方式来分配内存.
举个例子,根据用户的输入一个整数来确定用户要输入的数组维数,这个整数不是一定确定的数值,我们可以用一个变量n来表示,并用它接受用户的输入,再根据n来生成一个整数数组.程序不能写成int
array[n];的形式,这样程序是不能编译通过的,这是因为n是一个不确定的数值.只能用new或malloc来通过用户的输入来分配内存.可以写成这样:
int
n;
cout
<<
"input
n:";
cin
>>
n;
cout
<<
endl;
int*
iArray
=
new
int[n];
for
(int
i
=
0;
i
<
n;
i++)
{
cin
>>iArray[i];
⑻ C语言中的内存地址和存储单元是什么概念
C语言中的内存地址和存储单元是什么概念
无符号的整数和有符号的正整数都是用二进制原码来表示,而负整数则是使用补码来表示(补码的算法:负数的绝对值的原码安位取反再加一)。举个例子来说吧:
假设机器使用的是16位来存储整数。
10
的存在形式是0000000000001010
-10的存在形式:
(1)
|-10|
=
10
,10原码为0000000000001010
(2)安位取反:
1111111111110101
(3)加1:
1111111111110110(最终结果)