如何sizeof操作符的工作在C

我想知道如何操作人员在sizeof的工作C.In代码belown我期待得到输出1,但得到4自从p被指向第一的位置,并在第一的位置有性格和它的大小应该是。

main() { char a[9]="amit"; int *p=&a; printf("%d",sizeof((char *)(*p))); }

--------------解决方案-------------

不,你问一个字符指针这是在您的实现4的大小。

那是因为你铸造复引用int指针p以一个char指针,那么要求的的大小。

其分解:

sizeof((char *)(*p))
| \__/
| \_ Dereference p to get an int.
\___________/
\_____ Convert that to a char * (size = 4).

如果你想对待你的第一个字符int (这毕竟是一个字符数组你反正投),你应该使用:

sizeof(*((char*)(p)))

这是int指针,转换回一个char 指针 ,然后取消引用。

打破下来

sizeof(*((char *)(p)))
| \________/
| \_ Get a char * from p (an int *)
\___________/
\_____ Dereference that to get a char (size = 1).

你得到剧组的结果的大小(char *)这是一个char *与4的大小。当然,你可以只说:

printf( "%d", sizeof(a[0]) );

和一个相当奇怪为什么你没有?

对于上述问题的答案是4。
在这里,你是类型转换为整数指向一个字符指针。
这意味着现在的整数指针持有字符。
对于sizeof操作符默认参数为int类型。
当你路过喜欢sizeof((char *)(*p))然后将其视为sizeof('a') 此CHAR一个被提升到一个int。 这就是为什么你得到4。

是,在32位系统上的代码段应显示p的大小要4.On 16位将显示2(不被高度在应用世界这些天中使用,但可在嵌入式世界被一个用于根据系统的要求)。 你已经做了强制转换为一个字符 ,这会影响到数据表示,而不是由指针指向你的数据占用的内存。

分类:C# 时间:2012-01-01 人气:0
本文关键词:
分享到:

相关文章

  • sizeof操作符返回奇怪结果 2012-06-28

    语言是C,gcc编译 如果我像这样一个结构 struct test { char item_1[2]; char item_3[4]; char item_4[2]; char item_5[2]; char item_6[4]; }; 我做的sizeof(结构测试)返回14(字节). 这是预期的结果. 但是,如果我这样做 struct test { int16_t item_1; int32_t item_3; int16_t item_4; int16_t item_5; int32_t i

  • 什么样的参数并sizeof操作符需要在C中? 2012-12-20

    [原文标题中提到"sizeof的功能".] 我想这和他们所有的工作: 字符* P; 的printf("* P的大小为%d \ N"的sizeof(* P)); //结果= 1的printf("P大小为%d \ N"的sizeof(P)); //结果= 4的printf("P大小为%d \ N"的sizeof(&P)); //结果= 4 我不知道为什么第一个printf是1,第2和第3个是4? 因此,可以sizeof的实

  • sizeof操作符和结构 2014-09-29

    struct s { int i; char * c; } *obj; obj = malloc(sizeof(struct s)); 例如说,我们有上述定义的结构(或一般的结构,我只是写了上面的一个例子的缘故). 然后,使用sizeof操作符的时候什么是更好的 的sizeof(的struct)或者sizeof(* OBJ)? 我更喜欢第一个,因为它使我更有意义(清楚地告诉我们,我们为的struct的对象分配内存) 此外,使用第二个可以引入逻辑错误(如通常的'忘记取消引用指针") 第一个可能会导

  • 用sizeof操作符的问题 2014-10-24

    因为我想在动态函数找到数组的大小,我用sizeof操作符. 但我得到了一些意想不到的结果. 这里一个演示程序告诉你,我想做的事情. //------------------------------------------------------------------------------------------ #include <iostream> void getSize(int *S1){ int S_size = sizeof S1/sizeof(int); std::cout&l

  • 为什么我得到不同的结果,当我申请sizeof操作符? 2012-03-02

    我有这个计划 #include <stdio.h> int main() { char arr[100]; printf("%d", (int)sizeof(0,arr)); } 当作为C文件编译的这4打印并打印100作为一个C ++文件. 为什么? 我用gcc. --------------解决方案------------- 在C逗号运算符的右手操作的结果具有类型和值 . 在C逗号操作符不产生左值. 因此,有一个左值,导致数组类型的衰变指针类型右值的转换. 因此,使用C你

  • 有没有sizeof操作符在java中。 我如何才能找到Java中的对象的大小? 2012-03-15

    可能显示的文件: 编程方式计算由Java对象,包括它引用的对象占用的内存 在Java中,什么是确定物体的大小,最好的方法是什么? 你好 有没有sizeof操作符在Java ..但我怎么能知道Java中的对象的大小? 谢谢 --------------解决方案------------- 你可以序列化对象的字节数组输出流. 这不会给你的对象的确切大小,因为它会跳过过渡数据,但至少会给你你的对象有多大是个不错的主意. 你不能. 该内部表示JVM专用. 如果你想要一个经验估计为您的JVM他们,你可以试试

  • C ++ sizeof操作符 - 指针翻番 2012-08-02

    我有sizeof操作符(C ++)意想不到的结局. 在主类,我有这些线 double * arguments_ = new double(); *arguments_ = 2.1; *(arguments_+1) = 3.45; cout << (sizeof arguments_) << ' ' << (sizeof arguments_[0]) << ' '<< (sizeof arguments_)/(sizeof arguments_[0

  • 为什么我的土布sizeof操作符需要一个char *投? 2012-12-12

    下面是程序找到一种结构的大小,而无需使用sizeof操作: struct MyStruct { int i; int j; }; int main() { struct MyStruct *p=0; int size = ((char*)(p+1))-((char*)p); printf("\nSIZE : [%d]\nSIZE : [%d]\n", size); return 0; } 为什么类型转换为char *要求? 如果我不使用的char *指针,输出为1 - 为什么? ---

  • 如何在C ++中sizeof操作符来实现? 2013-03-09

    可有人点我到sizeof操作符的在C ++实现,并对其实施了一些说明. sizeof的是,不能被重载操作者中的一个. 因此,这意味着我们不能改变其默认行为? --------------解决方案------------- sizeof是不是在C ++中一个真正的运营商. 这仅仅是特殊的语法这将插入一个常数等于该参数的大小sizeof并不需要或者有任何运行时支持. 编辑:你想知道如何确定一类/结构的大小看它的定义? 这个规则是ABI的一部分,编译器只是执行. 基本的规则包括 大小和对齐方式定义基本

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.775 (s). 10 q(s)