有什么用途:
static_castdynamic_castconst_castreinterpret_cast(type)valuetype(value)如何决定在哪些特定情况下使用哪个?
我是C初学者,我对C答案书中的以下示例感到困惑.
在系统中查找unsigned long long大小的一种方法是键入:
printf("%llu", (unsigned long long) ~0);
Run Code Online (Sandbox Code Playgroud)
我不知道为什么这个语法有效?
在我的系统上,int是32位,long long是64位.
我所期望的是,因为0是一个整数类型的常量,~0计算一个32位整数的否定,然后unsigned long long由转换运算符转换为a .结果应该给出2 32 - 1.
不知何故,看起来~运营商已经知道它应该在64位上运行?
编译器是否将此指令解释为printf("%llu", ~(unsigned long long)0);?自演员表演以来听起来并不正确并~具有相同的优先权.
这里对C很新,我认为我几乎没有掌握指针的概念,但语法有点令人困惑所以我在试图理解这个表达式的x = (char *) &a;含义时遇到了麻烦.
其余功能供参考:
#include<stdio.h>
int main()
{
int a;
char *x;
x = (char *) &a;
a = 512;
x[0] = 1;
x[1] = 2;
printf("%d\n",a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
更具体地说,为什么有必要写x = (char *) &a;而不是仅仅x = &a;?添加了(char *)什么来改变表达式?
char *sBuffer=new char[20];
char * sStringStart = sBuffer;
long * plMsgStart = (long *) sBuffer;// what is this line doing
long i=500;
*plMsgStart = i // what is this line doing
Run Code Online (Sandbox Code Playgroud)
最后一行是否在char数组中分配500?但是当我打印数组时,我得到了垃圾值
嘿,下面的人是实际的代码,我在将代码从c ++转换为c#时遇到了它,下面的代码是c ++函数的一部分,现在为什么下面的函数会给出垃圾值?
char *sBuffer=new char[20];
char * sStringStart = sBuffer;
BSTR bsMsgBody= SysAllocString(L"Helo");
sStringStart+=4;
long * plMsgStart = (long *) sBuffer;
long l=50;
*plMsgStart=l;
sprintf(sStringStart, "%S", bsMsgBody);
printf("%S",sBuffer);
Run Code Online (Sandbox Code Playgroud) decimal d = 2;
int i = (int) d;
Run Code Online (Sandbox Code Playgroud)
我已经多次看到这种情况,其中数据类型被括号括起来。
为什么不直接使用int i = int d;呢?