从int*到int的转换无效

Invalid conversion from int* to int

本文关键字:int 转换 无效      更新时间:2023-10-16

我正在自学指针,想知道传递地址的正确方法是什么?

    int main(){
        int kevin = 10,tiu,gana;
        int *kevinpointer;
        kevinpointer = &kevin;
        tiu = kevin;
        gana = &tiu;
        cout << "The value of Kevin is: ";
        cout << kevin << endl;
        cout << "The address of Kevin is: ";
        cout << kevinpointer << endl;
        cout << "The address of KevinPointer is:  ";
        cout << *kevinpointer << endl;
        cout << "The value/address of tiu is: ";
        cout << tiu << endl;
        cout<< "The address of gana is: ";
        cout << gana << endl;
    }

我在"gana=&tiu;">从int*到int[f-permission]的转换无效时遇到错误。

您将变量gana定义为具有类型int

    int kevin = 10,tiu,gana;

但是您正试图将int *类型的对象分配给它

gana = &tiu;

如果您将变量定义为具有类型int *

    int kevin = 10,tiu, *gana;

那么这个语句

    gana = &tiu;

将是正确的。

考虑到这些报表

cout << "The address of KevinPointer is:  ";
cout << *kevinpointer << endl;
//...
cout<< "The address of gana is: ";
cout << gana << endl;

是错误的。应该有

cout << "The address of KevinPointer is:  ";
cout << &kevinpointer << endl;
//...
cout<< "The address of gana is: ";
cout << &gana << endl;

ganaint,而您正试图将其用作int*。将前两行更改为:

int kevin = 10, tiu;
int *kevinpointer, *gana;

程序应该编译。然而,您有这样的片段:

cout<< "The address of gana is: ";
cout << gana << endl;

这没有任何意义。变量gana不能保存自己的地址。这将要求它同时是int*int**,这没有任何意义。此代码应为:

cout << "The address of tiu is: " << gana << endl;

指针是而不是整数。它们不兼容。

为了强制从指针中获取整数,请使用显式强制转换。

gana = (int)&tiu;

此外,标准并没有说明sizeof(int) == sizeof(void *)。如果要使用大小等于指针的整数类型,则应使用intptr_tuintptr_t,后者位于<stdint.h>中。