C++ (int*)在本课程中的意义是什么?
我编写了两个程序,打印出指针C++ (int*)在本课程中的意义是什么?,c++,c,pointers,casting,C++,C,Pointers,Casting,我编写了两个程序,打印出指针p指向的变量: 第一个方案: #include <stdio.h> int main (void){ int *p; int a=5, q; p=&a; q=*p; printf("%d", q); } #包括 内部主(空){ int*p; int a=5,q; p=&a; q=*p; printf(“%d”,q); } 第二个方案: #include <stdio.h> int
p
指向的变量:
第一个方案:
#include <stdio.h>
int main (void){
int *p;
int a=5, q;
p=&a;
q=*p;
printf("%d", q);
}
#包括
内部主(空){
int*p;
int a=5,q;
p=&a;
q=*p;
printf(“%d”,q);
}
第二个方案:
#include <stdio.h>
int main(void)
{
int a=5;
int*p;
p= (int*)&a;
printf("%d", *p);
return 0;
}
#包括
内部主(空)
{
INTA=5;
int*p;
p=(int*)&a;
printf(“%d”,*p);
返回0;
}
我的问题:
两个程序都打印
a
的值,即5
。但是,第二个程序使用p=(int*)&a代码>而不仅仅是p=&a代码>。有人能告诉我这里的(int*)
施法的意义吗?没有意义,相反,这种施法是多余的,不是必需的
在您的代码中,a
的类型为int
,p
的类型为int*
。因此,
p= (int*)&a;
及
都是一样的,建议使用第二个。没用
a
是一个int
,因此&a
已经是一个指向int
的指针,它是类型转换的无用用法。就像
int a = (int) 10 ;
强制转换是程序员告诉计算机的一种方式,即使计算机认为某些东西是一种类型,我们也希望将其视为另一种类型
但是这里的强制转换没有用,因为这里a是整数,因此a的地址对于整数指针不需要在这里强制转换。这是类型强制转换,告诉编译器分配给指针p的值是&a是整数类型(int)但是在这里它没有任何用处&返回分配给变量a的地址,并且它总是一个整数。(int*)
是一个强制转换。它是无用的,因为&a
已经是int*
类型。这是一个无用的类型转换。注意(int*)
不仅仅是一个无用的类型转换,它还是一个额外的维护点和危险点:如果有人从int a=5代码>表示短a=5代码>,则可以编译带有(int*)
的程序,并以未定义的行为执行,但如果不使用C样式转换,则在更新int*p之前,您将得到一个编译器错误代码>到对应于a
的类型。哦……好的。那么,如果“a”是一个浮点,但我想将其视为一个int…..那么就需要(int*)。@Eliza:没错,但很危险:在某些平台上,它们在内存中占用的字节数不同,当存储到浮点寄存器中时,某些整数值可能是无效的“陷阱”表示形式,您首先要确保完全理解严格的别名规则。
int a = (int) 10 ;