C++ 空指针

C++ 空指针 首页 / C++入门教程 / C++ 空指针

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

空指针的语法

void *ptr;

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

int *ptr; //整数指针声明
float a=10.2;//浮动变量初始化
ptr= &a; //此语句引发错误。

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

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

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

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

C++ Void Pointer

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

无涯教程网

让我们看一个简单的void指针示例。

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

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

C++ Void Pointer

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

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

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

在C中,

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

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

输出

C++ Void Pointer

在C++中,

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

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

输出

C++ Void Pointer

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

Go语言核心36讲 -〔郝林〕

Elasticsearch核心技术与实战 -〔阮一鸣〕

Vim 实用技巧必知必会 -〔吴咏炜〕

程序员的测试课 -〔郑晔〕

超级访谈:对话毕玄 -〔毕玄〕

运维监控系统实战笔记 -〔秦晓辉〕

手把手带你写一个MiniSpring -〔郭屹〕

AI绘画核心技术与实战 -〔南柯〕

结构会议力 -〔李忠秋〕

好记忆不如烂笔头。留下您的足迹吧 :)