我正在使用库中的函数,其中最重要的函数采用 type 的参数const short int*
。相反,我所拥有的是int *
并且想知道是否有办法将 aint *
转换为const short int*
. 以下代码片段突出显示了我面临的问题:
/* simple program to convert int* to const short* */
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
void disp(const short* arr, int len) {
int i = 0;
for(i = 0; i < len; i++) {
printf("ith index = %hd\n", arr[i]);
}
}
int main(int argc, char* argv[]) {
int len = 10, i = 0;
int *arr = (int *) malloc(sizeof(int) * len);
for(i = 0; i < len; i++) {
arr[i] = i;
}
disp(arr, len);
return 0;
}
上面的代码片段编译。这是我到目前为止所尝试的:
1. 尝试了 c 风格的演员表。函数调用看起来像这样:
disp((const short*) arr, len)
. 结果输出很奇怪:
ith index = 0
ith index = 0
ith index = 1
ith index = 0
ith index = 2
ith index = 0
ith index = 3
ith index = 0
ith index = 4
ith index = 0
- 尝试了 const-ness 演员表。函数调用看起来像:
disp(const_cast<const short*> arr, len);
这导致编译时出错。
我的问题:
1. 为什么方法 1 的输出如此奇怪?那边是怎么回事?
2. 我看到了一些使用方法 2 中的 const cast 删除 const-ness 的示例。我不知道如何添加相同的内容。
3. 有没有办法把 anint*
转换成 a const short int*
?
PS:如果以前有过此类问题,请告诉我。我用谷歌搜索并没有找到任何具体的东西。