一级指针能赋值给二级指针吗?或者反过来赋值可以吗?网上有的人说可以,但我实践起来不行。


#include<iostream>
int main()
{
    using namespace std;
   int ** pp3=NULL;
   int * p4=NULL;
  int n=3;
  p4=&n;

  pp3=p4;   //这里编译器提示错误      (不能将 "int *" 类型的值分配到 "int **" 类型的实体)  反过来,p4=pp3也不行。

  cout << pp3 << endl; 
  cin.get();
  cin.get();
  return 0;
}

有知道 一级指针与二级指针能相互赋值吗?求解答。

补充一点,我尝试过 const int* 与const int ** 指针 类型,也是不能相互赋值。提示(不能将 "const int *" 类型的值分配到 "const int **" 类型的实体)

需要强制类型转换是可以的。直接赋值当然是不可以的,因为类型不同。

没这么多麻烦的东西,所谓的一级二级指针都是扯淡,指针就是指针,int*就是指向int类型的指针,int**就是(int*)*,即指向int*类型的指针,所以你把int*int**之间转换,就相当于int*double*等的转换,直接转换不行,但可以强制转换,但是没有实际用处

【以下回答由 GPT 生成】

问题答案:

一级指针不能直接赋值给二级指针,也不能反过来赋值。这是因为一级指针和二级指针的类型不同,不能直接进行赋值操作。

要理解这个问题,我们需要了解指针的基本概念。指针是一个变量,它存储了一个内存地址。一级指针指向一个变量的地址,而二级指针指向一个指针变量的地址。

在你的代码中,pp3是一个二级指针,p4是一个一级指针。当你使用pp3 = p4;时,编译器会报错,因为p4的类型是int,而pp3的类型是int*,它们的类型不匹配。

如果你想把一级指针赋值给二级指针,你需要进行一些额外的步骤。你可以使用一个临时的一级指针来存储一级指针的地址,然后将这个临时指针的地址赋给二级指针。下面是一个示例代码:

#include <iostream>
using namespace std;

int main()
{
    int* p1 = NULL;  // 一级指针
    int** p2 = NULL; // 二级指针
    int num = 5;     // 一个整数变量

    p1 = &num;       // p1指向num的地址
    p2 = &p1;        // p2指向p1的地址,即二级指针指向了一级指针

    cout << "p2的值: " << p2 << endl;       // 输出p2的值,即p1的地址
    cout << "p2所指向的地址的值: " << *p2 << endl;     // 输出p2所指向的地址的值,即p1的值
    cout << "p2所指向的地址所存储的值: " << **p2 << endl; // 输出p2所指向的地址所存储的值,即num的值

    return 0;
}

这样,你就成功地将一级指针赋值给了二级指针。

请注意,这里我们使用了一个临时指针来存储一级指针的地址,然后将这个临时指针的地址赋给了二级指针。这是因为一级指针和二级指针的类型是不同的,不能直接进行赋值操作。

所以,回答你的问题,一级指针不能直接赋值给二级指针,也不能反过来赋值。你可以通过使用一个临时指针来存储一级指针的地址,然后将这个临时指针的地址赋给二级指针来实现一级指针和二级指针之间的赋值。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^