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

doc*_*pus 4 c pointers memory-address

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

Som*_*ken 8

这是一个演员.它告诉编译器它应该解释&a为a char*而不是int*它的实际类型.

你没有做这个演员会让你得到一个编译错误,因为类型不匹配,你基本上告诉编译器"我知道我在做什么,我确定这是一个char*"因此允许你接近类型X,就好像它是类型Y.

通常,将类型指针强制转换XY并尝试通过类型取消引用它Y会违反严格的别名规则,但在这种情况下,因为我们char*允许通过它进行别名.

在此上下文中,它允许您访问int(by x[])的各个字节,请注意结果将根据计算机的字节顺序(大或小)而有所不同.

  • 对downvotes的解释会很好. (6认同)