您的位置:首页 > 编程语言 > C语言/C++

sizeof(int)*p 表示什么意思?

2017-07-12 09:54 666 查看
1.sizeof(int)*p 表示什么意思? 留几个问题(讲解指针与数组时会详细讲解),32 位系统下:2.int *p = NULL; sizeof(p)的值是多少? sizeof(*p)呢? 3.int a[100]; sizeof (a) 的值是多少?sizeof(a[100])呢? sizeof(&a)呢?sizeof(&a[0])呢?4.int b[100]; void fun(int b[100]) { sizeof(b); // sizeof (b) 的值是多少? }答:1.表示计算int型所占字节数,然后再乘以p。
如果是这种形式的话:sizeof(int *p),表示计算指向整型的指针变量p所占的字节数。
2.int *p=NULL; 指针地址用 DWORD, sizeof(p)  是  4。sizeof(*p) 是值, 等于  sizeof(int) ,可能 是 2 也可能是 4。
(DWORD 就是 Double Word, 每个word为2个字节的长度,DWORD 双字即为4个字节,每个字节是8位,共32位。)
定义指针,一般先给初始化,用NULL来初始化它,避免野指针。你这里说的int *p,这个p里面是随机值,而int *p=NULL,这个p是有值的,为NULL.这其实对程序也没有啥贡献,在后面你也可以随时让这个p指向别的地址。定义指针,顺便将它初始化为NULL,这样做编程更规范。

int *p;和int *p=NULL有什么区别啊?
int *p只是定义整形指针。
int *p=NULL是定义指针p并指向null,和int *p;p=NULL;一样

3.int a[100]; //声明了一个有100个int类型元素的数组, 数组下标从0~99, 所以a是数组名, 代表数组的首地址, 也就是&a[0]
sizeof (a) //返回数组a在内存中所占的空间大小,以字节为单位, 也就是sizeof(a) = sizeof(int) * 100 = 4 * 100 = 400bytes
//a本身是个地址,用int存放,占用4个字节。int就是4,a[100]一共是100个int变量,就是400.
sizeof(a[100])//求第100个元素的大小 ,用int存放,占用4个字节
sizeof(&a)//表示存放a的地址的空间内存的地址的大小,即&a也是个地址值。一个地址用int存放也是4个字节
sizeof(&a[0])//取第一个元素的地址,用int存放,占用4个字节
4.int b[100]; 
void fun(int b[100])
{ 
sizeof(b); //等于4
}
和void fun(int* b)
{ 
sizeof(b); //等于4
}是等价的。
当你在调用fun函数时,他们内部实际上是这样做的,先将b[100]数组的首个元素的地址赋值给了函数参数列表中的那个b指针,虽然都是b,但是却是在不同额作用域,故你可以理解成fun参数列表中的b是一个指针,在32位系统中,指针永远是4个字节。

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sizeof c语言