C++教程
C++控制语句
C++函数
C++数组
C++指针
C++对象
C++继承
C++多态
C++抽象
C++常用
C++ STL教程
C++迭代器
C++程序

C++ 空指针

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

无效指针的语法

void *ptr;
在C++中,我们无法将变量的地址分配给其他数据类型的变量。考虑以下示例:
int *ptr;  // integer pointer declaration
float a=10.2; // floating variable initialization
ptr= &a;  // this statement throws an error.
在上面的示例中,我们声明了一个整数类型的指针,即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;
}
在上面的程序中,我们声明一个整数类型的指针和一个浮点类型的变量。整数指针变量不能指向浮点变量,但只能指向整数变量。
输出
C++ Void Pointer
C++通过使用C++ void指针克服了上述问题,因为void指针可以保存任何数据类型的地址。
让我们看一个简单的void指针示例。
#include <iostream>
using namespace std;
int main()
{
  void *ptr;   // void pointer declaration
  int a=9;   // integer variable initialization
  ptr=&a;   // storing the address of 'a' variable in a void pointer variable.
  std::cout << &a << std::endl;
  std::cout << ptr << std::endl;
  return 0;
}
在上面的程序中,我们声明一个void指针变量和一个整数变量,其中void指针包含一个整数变量的地址。
输出
C++虚空指针

C和C++中空指针之间的区别

在C中,我们可以将void指针分配给任何其他指针类型,而无需进行任何类型转换,而在C++中,当我们将void指针类型分配给任何其他指针类型时,我们需要进行类型转换。
让我们通过一个简单的例子来理解。
在C语言中,
#include <stdio.h>
int main()
{
   void *ptr; // void pointer declaration
   int *ptr1;  // integer pointer declaration
   int a =90;  // integer variable initialization
   ptr=&a; // storing the address of 'a' in ptr
   ptr1=ptr; // assigning void pointer to integer pointer type.
   printf("The value of *ptr1 : %d",*ptr1);
   return 0;
}
在上面的程序中,我们分别声明了两个类型为void和integer的指针" ptr"和" ptr1"。我们还声明了整数类型变量,即" a"。声明后,我们将变量" a"的地址分配给指针" ptr"。然后,我们将void指针分配给整数指针,即ptr1而不进行任何类型转换,因为在C语言中,我们无需在将void指针分配给任何其他类型的指针时进行类型转换。
输出
C++空指针
在C++中,
#include <iostream>
using namespace std;
int main()
{
  void *ptr; // void pointer declaration
  int *ptr1; // integer pointer declaration
  int data=10; // integer variable initialization
  ptr=&data;  // storing the address of data variable in void pointer variable
  ptr1=(int *)ptr; // assigning void pointer to integer pointer
  std::cout << "The value of *ptr1 is : " <<*ptr1<< std::endl;
  return 0;
}
在上面的程序中,我们分别声明了两个类型为void和int类型的指针变量。我们还创建了另一个整数类型变量,即"数据"。声明后,我们将变量'data'的地址存储在一个空指针变量(即ptr)中。现在,我们想将void指针分配给整型指针,为此,我们需要将强制转换运算符(int *)应用于void指针变量。这个强制转换运算符告诉编译器void指针持有哪种类型的值。对于强制转换,我们必须在(char *)或(int *)之类的括号中键入数据类型和*。
输出
C++空指针
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4