什么是int*品脱; pint =(int*)数据; 意思?

mar*_*ain -1 c++ pointers

我正在阅读指针是如何工作的,因为我正在尝试理解qsort().但是指南给出了这段代码:

// increaser
#include <iostream>
using namespace std;

void increase (void* data, int psize)
{
  if ( psize == sizeof(char) )
  { char* pchar; pchar=(char*)data; ++(*pchar); }
  else if (psize == sizeof(int) )
  { int* pint; pint=(int*)data; ++(*pint); }
}

int main ()
{
  char a = 'x';
  int b = 1602;
  increase (&a,sizeof(a));
  increase (&b,sizeof(b));
  cout << a << ", " << b << endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

没有解释什么线

pint=(int*)data;
Run Code Online (Sandbox Code Playgroud)

pchar=(char*)data;
Run Code Online (Sandbox Code Playgroud)

手段.我理解其余的意思,但对我来说(char*)数据意味着什么是很有意义的.它是否指向char的值?但是,如果char是变量类型,怎么可能呢?

Jar*_*Par 8

这条线pint = (int*)data正在做两件事

  1. (int*)data是一个转换void*int*
  2. pint = ...是一个值的赋值pint

最终这个函数试图做的是将一个值指向的值递增data.它有点缺陷虽然a)签名接受任何指针类型,但实现仅适用于一组固定的类型和b)它错误地将大小与类型相关联.

鉴于这是C++,更好的方法是使用模板.它接受所有支持的输入类型++.

template <class T>
void increase(T* pValue) {
  ++(*pValue);
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,您只需使用参考

template <class T>
void increase(T& value) {
  ++value;
}
Run Code Online (Sandbox Code Playgroud)