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和一个浮点数变量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++ 空指针

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;
}

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

输出

C++ 空指针

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

在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;
}

在上面的程序中,我们声明了两个指针’ptr’和’ptr1’,分别为void和integer类型。我们还声明了一个整型变量’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,在声明之后,我们将变量data的地址存储在一个void指针变量ptr中。现在,我们想将void指针分配给int指针,为了做到这一点,我们需要使用转型操作符(int *)来对void指针变量进行转型。这个转型操作符告诉编译器void指针所保存的值的类型。对于转型,我们需要在括号中输入数据类型和*,比如(char *)(int *)

输出:

C++ 空指针

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程