关于C++语言中sizeof()函数的 问题

int a;int *p=a;sizeof(p)和sizeof(*p)分别表示什么意思
在数组中有一种用法用来求数组的元素个数
int a[10];int b;
b=sizeof(a)/sizeof(*a)这个怎么解释,主要是书上说sizeof()括号里面接指针表示指针自身所具有的长度,可是这里sizeof(a)却表示正葛数组的长度,是特别针对数组的特殊用法吗

在C/C++中,sizeof是操作符而不是函数,所以那对()不是必须的,在没有歧意时可以不写。sizeof操作符用来检测系统为跟在后面的变量、类型符分配了多少个字节。下面的代码可帮助理解:

//#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
int main(void){
    char x,*p=&x;
    printf("%d\n",sizeof p);//输出4,说明系统为p分配了4字节来存放x的地址
    printf("%d\n",sizeof *p);//输出1,说明系统为*p分配了1字节,也就是为x分配了1字节
    printf("%d\n",sizeof x);//与上一行比较
    return 0;
}



温馨提示:内容为网友见解,仅供参考
第1个回答  2012-03-28
sizeof(a)表示整个数组的大小,即sizeof(int)*10
sizeof(*a)表示数组一个单元即a[0]的大小,等于sizeof(int)
b=sizeof(a)/sizeof(*a)表示数组中单元的个数即10追问

我问的不是这个,我问的是sizeof(p)和sizeof(*p)表示什么,在数组中int a[10];a是这个数组的首地址,那sizeof(a)这里的a是个地址而(*a)是数组第一个元素:这么说来size函数的参数可以是地址也可以是左值对象,,p是指针,*p是指向a的指针,为吗sizeof(a)的参数是个地址求得的还是地址指向的数组的存储区域大小,这是sizeof函数在数组中的特别应用吗

第2个回答  2012-04-02
sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。
sizeof(a) 相当于sizeof(数组类型)*数组长度=sizeof(int)*10=40
sizeof(*a)就表示数组a的第一个元素 sizeof(int)=4
这里表示一个对象或者类型所占的内存字节数,因此sizeof(数组名)时,表示这个数组所占空间的大小
第3个回答  2012-03-31
首先 sizeof 不是函数 只是一个操作符.sizeof a因为a是数组名,当sizeof作用于一个class 、struct时,返回这些类型对象所占字节数,。当然 有这样一种情况 int a[10] ; void fun(int *a){cout<<sizeof a;}。 fun(a) 出来结果是4 , 数组名作为函数参数时会退化为指针。追问

我大概理解啦,在数组中,int a[10];中虽然可以用a来表示这个数组的首地址,但是实际上并不存在a这个指针量,所以sizeof(a)如果用来表示一个指针的长度的话,实际没有a这个指针量,所以C++用sizeof(a)来表示整个数组的长度,而对于普通量int a,*b=&a;其中sizeof(a)表示该量的长度,sizeof(b)表示该指针的长度,对于上面的数组int a[10];int *p=a;sizeof(a)表示数组的长度sizeof(p)sizeof(p)则表示该指针的长度,我说的对吗

本回答被提问者采纳
相似回答