アプリ版:「スタンプのみでお礼する」機能のリリースについて

"(int の要素数3の配列) へのポインタ" を意味するキャストはどのような書き方になりますか?
(int*[3]) かと思ったのですが、コンパイルエラーになります。

参考までに、ソースをのせておきます。
pai や ai のようなよくわからない変数名は、
型が複雑なためそこだけハンガリアン記法っぽく書いています。

#include<stdio.h>

// func は int の要素数3の配列 {0, 1, 2} の中の n 番目の要素を返す
int func(int (*pai)[3], int n){// pai means 'p'ointer to 'a'rray of 'i'nt.
return (*pai)[n];
}

int main(){
int ai[] = {0, 1, 2}; // ai means array of int.
int i = func(&ai, 1);

// 同じことを、先頭要素のポインタを経由してやりたい
int *pi = &ai[0]; // pi means pointer to int.
int j = func((int*[3])pi, 1); // "(int の要素数3の配列) へのポインタ" を
// 意味するキャストがしたい
// (int*[3]) ではエラーになる

printf("Of course %d = %d.\n", i, j);

return 0;
}

A 回答 (4件)

ああそうそう, 「どう書けばいいか」は, その型の変数が宣言できる人ならわかるはずです. たとえば今の例の「int の大きさ 3 の配列へのポインタ」だったら


int (*pai)[3]
って書いてるでしょ? そこから識別子の pai を消せばいい. それだけ.

typedef 使えばいいのに, って話もあるな.
    • good
    • 0
この回答へのお礼

変数名を抜けばいいだけなんですね
ありがとうございます

お礼日時:2014/12/17 21:19

因みに、C言語では、配列もポインタも同じ物なので



#include<stdio.h>

int func(int *pai, int n){
return pai[n];
}

int main(){
int ai[] = {0, 1, 2};
int i = func(ai, 1);

int *pi = ai;
int j = func(pi, 1);

printf("Of course %d = %d.\n", i, j);

return 0;
}

で良い。この方がコードが短くなるし速くなる。
    • good
    • 0
この回答へのお礼

ありがとうございます!

お礼日時:2014/12/17 21:23

int j = func((int*[3])pi, 1);



int j = func((int(*)[3])pi, 1);

funcの宣言の所には

int func(int (*pai)[3], int n)

って感じで「int (*pai)[3]」って書いてあるよね?ここから「変数名のpai」を削って、前後を括弧で括れば「キャスト」になる

int (*pai)[3]

int (*)[3]

(int (*)[3])
    • good
    • 0
この回答へのお礼

ただ変数名を抜けばよかったんですね
ありがとうございます

お礼日時:2014/12/17 21:23

(int (*)[3])

    • good
    • 0
この回答へのお礼

括弧かー、なるほど!

お礼日時:2014/12/17 21:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!