Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ (int*)在本课程中的意义是什么?_C++_C_Pointers_Casting - Fatal编程技术网

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 ;