C语言中数据存放的简单问题

来源:百度知道 编辑:UC知道 时间:2024/04/28 03:06:55
比如,char ch[10]="abcde";
那么系统首先分配10个字节的空间给它,ch是首地址,比如是ox3333,
那么就是说'a'的地址是ox3333,bcde的地址都是依次加一?
如果是int ch【10】={1,2,3,4,5};那么地址间隔就是2?
我想的不多,请多讲点,
那么请问 上面的如果printf("%d\n",&a[1]-a); 对int型的,
不就应该输出2吗?为什么输出的是1

你的理解基本上是对的,
就有一点,int的size不一定就为2,这个取决于你的编译器是16位的,还是32位的,
如果是16位的,则为2字节,如果是32位的,则为4字节

另外,
如果你想验证的话,printf("%d\n",&a[1]-a); 这么输出是不行的,
这么输出验证的是偏移量,
需要将地址值进行强制类型转换后,才可得到正确结果:
#include<conio.h>
#include<stdio.h>

int main()
{
int a[10]={1,2,3,4,5};
printf("%d\n",(int)&a[1]-(int)a);

getch();
}

呵呵.首先你的理解是对的.在内存里,最小单元是字节,对吧.但在补充问题里,你又弄错了.两个地址相减得到的不是字节数,而是存储数据所占空间的间隔数,要计算字节数,可以用sizeof(&a[1]-a).你试试.朋友.

你理解错误了!
指针相减是求的他们两个指针之间的偏移量为1,而不是地址之间的差!(地址对应的可不是整型数据)
你如果想看两个地址之间的差可以单独输出地址的值!
c++里是这样的:cout<<&a[1]<<" "<<a<<endl;(a==&a[0])
这样就可以看出他们两个之间的差为4!(32位)

你理解的是对的....地址的偏移就是看数据的类型.