C++ Void Pointer 空指针

void 指针是一种通用指针,可以保存任何数据类型的地址,但它不与任何数据类型相关联。

空指针的语法

句法 (Syntax)

void *ptr;

在 C++ 中,我们不能将变量的地址分配给不同数据类型的变量。考虑以下示例:

句法 (Syntax)

int *ptr;  // 整型指针声明  
float a=10.2; // 浮动变量初始化  
ptr= &a;  // 这个语句抛出一个错误

在上面的例子中,我们声明了一个整数类型的指针,即ptr和一个浮点变量,即'a'。声明后,我们尝试将“a”变量的地址存储在“ptr”中,但这在 C++ 中是不可能的,因为变量不能保存不同数据类型的地址。

让我们通过一个简单的例子来理解。

例子 (Example)

#include <iostream.h>  
using namespace std;  
int main()  
{  
    int *ptr;  
    float f=10.3;  
    ptr = &f; // error  
    std::cout << "*ptr 的值为: " <<*ptr<< std::endl;  
    return 0;  
}

在上面的程序中,我们声明了一个整型指针和一个浮点型变量。整型指针变量不能指向浮点型变量,但可以指向唯一的整型变量。

输出

C++ 空指针

C++通过使用C++ void指针克服了上述问题,因为void指针可以保存任何数据类型的地址。

让我们看一个空指针的简单例子。

例子 (Example)

#include <iostream>  
using namespace std;  
int main()  
{  
  void *ptr;   // 空指针声明  
  int a=9;   // 整型变量初始化  
  ptr=&a;   // 将“a”变量的地址存储在空指针变量中。  
  std::cout << &a << std::endl;  
  std::cout << ptr << std::endl;  
  return 0;  
}

在上面的程序中,我们声明了一个空指针变量和一个整数变量,其中空指针包含一个整数变量的地址。

输出

C++ 空指针

C和C++中void指针的区别

在 C 中,我们可以将 void 指针分配给任何其他指针类型而无需任何类型转换,而在 C++ 中,当我们将 void 指针类型分配给任何其他指针类型时,我们需要进行类型转换。

让我们通过一个简单的例子来理解。


在 C 中,

例子 (Example)

#include <stdio.h>  
int main()  
{  
   void *ptr; // 空指针声明  
   int *ptr1;  // 整型指针声明  
   int a =90;  // 整型变量初始化  
   ptr=&a; // 在 ptr 中存储 'a' 的地址  
   ptr1=ptr; // 将 void 指针分配给整数指针类型。  
   printf("*ptr1 的值: %d",*ptr1);  
   return 0;  
}

在上面的程序中,我们分别声明了两个类型为 void 和 integer 的指针 'ptr' 和 'ptr1'。我们还声明了整型变量,即'a'。声明后,我们将“a”变量的地址分配给指针“ptr”。然后,我们将 void 指针分配给整数指针,即 ptr1,而不进行任何类型转换,因为在 C 中,我们不需要在将 void 指针分配给任何其他类型的指针时进行类型转换。

输出

C++ 空指针

在 C++ 中,

例子 (Example)

#include <iostream>  
using namespace std;  
int main()  
{  
  void *ptr; // 空指针声明  
  int *ptr1; // 整型指针声明  
  int data=10; // 整型变量初始化  
  ptr=&data;  // 将数据变量的地址存储在void指针变量中  
  ptr1=(int *)ptr; // 将 void 指针赋值给整型指针  
  std::cout << "*ptr1 的值为:" <<*ptr1<< std::endl;  
  return 0;  
}

在上面的程序中,我们分别声明了两个类型为void和int类型的指针变量。我们还创建了另一个整型变量,即“data”。声明后,我们将变量“data”的地址存储在一个空指针变量中,即ptr。现在,我们要将 void 指针赋值给整型指针,为此,我们需要对 void 指针变量应用强制转换运算符,即 (int *)。这个转换运算符告诉编译器 void 指针持有哪种类型的值。对于转换,我们必须在方括号中键入数据类型和 *,例如 (char *) 或 (int *)。

输出

C++ 空指针


  • 使用社交账号登录,本站支持
全部评论(0)