疑問点
C言語のポインタを学習しているものです。こちらのサイトのコードで疑問に
感じた箇所があるのでお伺いします。
配列中に指定した数字がどこに入っているか調べる関数でポインタ渡しを使っているのですが、
整数を扱っているにもかかわらず、実引数で渡すアドレスがなぜかcharとして取り扱われています。
この理由がなぜか教えていただけますでしょうか。
コードに書いてあるコメントでは
Since char takes one byte, we can use char pointer for any type
と書いてあるのですが、charが1byteだと整数を扱っていい意味が分かりません。。。
該当のソースコード
C
1#include <stdio.h> 2#include <stdbool.h> 3 4bool compare (const void * a, const void * b){ 5return ( *(int*)a == *(int*)b ); 6} 7 8int search(void *arr, int arr_size, int ele_size, void *x, 9 bool compare (const void * , const void *)){ 10 11 char *ptr = (char *)arr; // <- ここでなぜcharとして扱われているかが不明 12 13 int i; 14 for (i=0; i<arr_size; i++) 15 if (compare(ptr + i*ele_size, x)) 16 return i; 17 18 // If element not found 19 return -1; 20} 21 22int main(){ 23 int arr[] = {2, 5, 7, 90, 70}; // <- 取り扱う対象は整数 24 int n = sizeof(arr)/sizeof(arr[0]); 25 int x = 7; 26 printf ("Returned index is %d ", search(arr, n, 27 sizeof(int), &x, compare)); 28 return 0; 29} 30
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/30 01:17 編集
2021/04/30 12:32