最も重要な関数が type の引数を取るライブラリの関数を使用していますconst short int*
。私が代わりに持っているのはint *
、 を にキャストする方法があるかどうか疑問に思っていint *
ました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-style キャストを試しました。関数呼び出しは次のようになります
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キャストを使用してconst-nessを削除する例を見ました。同じものを追加する方法がわかりません。
3. を にキャストする方法はありint*
ますconst short int*
か?
PS: 以前に尋ねられたこの種の質問がある場合は、お知らせください。私はそれをグーグルで検索しましたが、具体的なものは見つかりませんでした。