关于c++中sizeof用法和数组指针问题
intarr1[]={1,2,3};//定义一个含有三个元素的数组int*source=arr1;//定义一个int指针指向arr1的第一个元素size_tsz1=siz...
int arr1[]={1,2,3};//定义一个含有三个元素的数组
int *source=arr1;//定义一个int指针指向arr1的第一个元素
size_t sz1=sizeof(arr1);//sz1输出等译12
size_t sz2=sizeof(*source);//sz2等于4
为什么会这样子???求高人解释~~ 展开
int *source=arr1;//定义一个int指针指向arr1的第一个元素
size_t sz1=sizeof(arr1);//sz1输出等译12
size_t sz2=sizeof(*source);//sz2等于4
为什么会这样子???求高人解释~~ 展开
8个回答
展开全部
sizeof(arr1),arr1是数组,arr1里面是int变量 占据4个字节,所以3个变量占据12个字节。
int *source ,source是一个指针,若是sizeof(source)之后你会发现是4 因为所有的指针都是大小为4
*source是指针所指向的元素,int类型 占据4个字节 所以等于4
int *source ,source是一个指针,若是sizeof(source)之后你会发现是4 因为所有的指针都是大小为4
*source是指针所指向的元素,int类型 占据4个字节 所以等于4
追问
如果这样写size_t sz3=sizeof(*arr1);//sz3为什么又等于4呢?是因为*arr1是一个指针?我就是不理解*arr1表示的啥
追答
arr1是数组名同时也是数组首元素的地址,相当于一个指针,*是取值运算符,因此*arr1其实是数组的首元素,还是一个int变量所以结果还是4
展开全部
sizeof()这个函数,里面是指针,结果都为4
size_t sz1=sizeof(arr1);//sz1输出等译12
因为一个int型占4个字节,所以arr1里面有三个元素,所以是12
sizeof得到的是其在内存中占的字节数
指针是用来存放地址的,它等于计算机内部地址总线的宽度。所以在32位计算机中,一个指针变量的返回值必定是4
希望能到你。。。
size_t sz1=sizeof(arr1);//sz1输出等译12
因为一个int型占4个字节,所以arr1里面有三个元素,所以是12
sizeof得到的是其在内存中占的字节数
指针是用来存放地址的,它等于计算机内部地址总线的宽度。所以在32位计算机中,一个指针变量的返回值必定是4
希望能到你。。。
追问
size_t sz1=sizeof(arr1);//sz1输出等译12
里面写得是arr1,arr1不也是一个指向首元素的指针吗?
还有如果这样写size_t sz3=sizeof(*arr1);//sz3为什么又等于4呢?是因为*arr1是一个指针?
追答
数组的sizeof值等于数组所占用的内存字节数
指针都是4哦。。。。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
sizeof(数组名)求的是整个数组的大小,即元素类型的大小乘以元素个数
source是一个指针变量,其存放的是地址,而*source的值是数组arr1的首地址,32位机的地址都是4个字节
source是一个指针变量,其存放的是地址,而*source的值是数组arr1的首地址,32位机的地址都是4个字节
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
arr1的类型是int [],是数组,你赋的值有三个int的,所以是3*4=12
*source的类型是int ,占有四个字节。
*source的类型是int ,占有四个字节。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
size_t sz1=sizeof(arr1)是数组大小,但是sizeof返回不是个数,而是大小,以字节为单位。
size_t sz2=sizeof(*source);返回第一个数组值得大小。
size_t sz2=sizeof(*source);返回第一个数组值得大小。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询