有关C语言在计算机中的存储地址?

来源:百度知道 编辑:UC知道 时间:2024/05/24 17:08:50
C中的数据类型int char float double 都各自占有不同的字节;
请问一下,以计算机中如何表达;它在内存地址里,为何一个内存地址可以表达任意数据类型。内存地址与字节数又有何关系!
float a[3][4]; /***不管是啥数据类型****/
if(&a[1][2]==a+6) /****这里都是加6*****/
printf("%x\n",&a[1][2]);
a[1][2]应该占有多少字节?
请问一下:当我定义int a[10]时 它代表的整型数组 数组包含有10*2个字节的东西,那么当在编辑时,它在内存的存储方式是连续的,a+0个地址就是a[0]的地址,加1就是后面的地址.持续到a+9代表了最后一个地址.那么为什么书上说它的存储方式是如下:如当a[0]=ffbc时
a[1]=ffbc+2 ....用这样的表达方式!与书上为什么不一样.郁闷
┌——┐
┆ ┆a[0]=的地址:ffbc
├┄┄┤
│ │a[1]=的地址:ffbc+2
├——┤
│ │;;;;;持续至a[9] 内存地址跟字节数有何关系
1k等于1024个字节
那么一个地址代表着什么?
某计算机内存按字节编址,内存地址区域从44000H到6BFFFH,共有__B__K,若采用16K×4bit的SRAM芯片,构成该内存区域共需__C__片。

供选择的答案:

(11) A.128 B.160 C.180 D.220

(12) A.5 B.10 C.20 D.32
看到这个题,总算有点明白了.一个16进制的地址.它所占有多少个字节.??这个想明白了.上面的问题应该不在郁闷不解了~!~
如何用二进制方法打印出int a[10]??

其实很简单,比如你
int* p = new int;
意思就是说申请4个字节的内存单位,把第一个内存的地址给p存着。

你说“为何一个内存地址可以表达任意数据类型”,其实不然,一个内存地址并不能够表达任意数据类型。一个内存地址真的就是一个内存地址,里面并不存有数据是何类型的信息,这个信息其实是你告诉内存的。

你作为代码编写者,一般是这么写的int b = *p;(p是我上面new出来的),这句话的意思是,到p指向的地址,给我取4个字节,赋给b。这个4是哪来的?是b给的,因为b是int的,机器判断出b是需要4个字节的,所以他就去要4个字节。所以假如没有强制类型转换,你double* p = new double; 然后 int b=*p;
这时候b就会去p指向的地址,还是取4个字节,结果呢?当然就出错了。这就是为什么有强制类型转换,把变量的内存大小统一了才能赋值。

总之你就明白一点,赋值的时候是你告诉内存两点:从哪开始,要多少字节,内存本身只是一个一个字节地把数据存着,啥也不干。

希望我说的你能明白。

不管是什么类型
内存中存的都是数据。(01010。。。)
其实所谓的类型是人对这些数据的看法。
如65,可以说是一个整数65。有符号或无符号。也可以说是一个字母'A'。。。
如果了解下汇编。会更清楚的。
一般来说数据类型定义了。内存块的大小和处理这块内存中数据的方法。(但也不是决对的)
a[1][2]是一个float。当然还是占4字节
还有那里的加6是编译器来对地址进行加减的。所加地址应是6*4字节。编译器自动处理的。所以可以都为加6;

if(&a[1][2]==a+6)
这句应该改为
if(&a[1][2]==a[0]+6)

至于你的问题,你对基础的东西理解很有问题,导致这样的问法很难跟你讲清楚。

很简单的来说,内存就是一个地址,在这个地址里你可以放许多不同类型的数据,比如在同一个桌子上,在不同的时间你可以放书也可以放铅笔,当然这个时候是只能放一种,你那走了书就可以放铅笔了,就是这