相关疑难解决方法(0)

什么时候应该使用static_cast,dynamic_cast,const_cast和reinterpret_cast?

有什么用途:

  • static_cast
  • dynamic_cast
  • const_cast
  • reinterpret_cast
  • C风格演员 (type)value
  • 功能式演员 type(value)

如何决定在哪些特定情况下使用哪个?

c++ pointers casting c++-faq

2367
推荐指数
9
解决办法
52万
查看次数

整数文字的类型和〜在C中

我是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 integer literals bitwise-operators

20
推荐指数
2
解决办法
1078
查看次数

这个表达式(char*)在C中的含义是什么?

这里对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 *)什么来改变表达式?

c pointers memory-address

4
推荐指数
1
解决办法
294
查看次数

类型转换长指针问题

  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)

c c++

1
推荐指数
1
解决办法
133
查看次数

为什么在这个例子中 (int) 两边有括号?

decimal d = 2;
int i = (int) d;
Run Code Online (Sandbox Code Playgroud)

我已经多次看到这种情况,其中数据类型被括号括起来。

为什么不直接使用int i = int d;呢?

c syntax parentheses

1
推荐指数
1
解决办法
4637
查看次数