2017-02-01 15 views
1

私はtake_picture()という関数を書いています。この機能は、カメラが写真を撮影してデータをアレイに格納するようにします。cプログラムのunsigned intまたはuint8_t

配列が配置されているアドレスを返す関数と、配列のサイズを返す関数が必要です。

だからこれは私の関数の宣言です:

uint8_t * take_picture(int *piclength) 

私の質問は、関数の戻り値の型と引数の正しい/論理データタイプでしょう何ですか?配列のアドレスとサイズを格納することを考慮していますか? uint8_tintは意味がありますか?

ありがとう

+0

INTサイズ= 0 '試し。 uint8_t * address = take_picture(&size); ' – chux

+0

ポインタを整数に変換したいのであれば(その理由は?)、その型は' uintptr_t'でなければなりません。 –

+0

@EugeneSh。 JNIとの間でJavaクラスメソッドに渡すなど、これが有用な正当なケースがあります。 –

答えて

-1

unsigned int size; //画像のサイズは常に正で大きくなります。

uintptr_t address; //これはstdint.h

または

unsigned int型のアドレスで利用可能な場合。 //ポインタサイズを格納することができます。

アドレス= take_picture(&サイズ);

uintptr_tを返しますが、あなたがリターンをtake_pictureわからない場合場合// take_picture、その後、あなたがやっていることのようにそれをキャスト:

アドレス=(符号なし* int型)take_picture(&サイズ)。

+0

* unsigned int address; //ポインタサイズを格納することができます。*いいえ、それは** NOT **です。それは古いアーキテクチャで動作するかもしれません。それは[現存するすべての一般的な64ビットアーキテクチャ(https://en.wikipedia.org/wiki/64-bit_computing#64-bit_data_models)で失敗します。ポインターの値を 'int'に入れないでください。 –

1

私の質問は、関数の戻り値の型と引数の正しい/論理データ型は何ですか?配列のアドレスとサイズを格納することを考慮していますか?

関数の戻り値の型は、配列項目へのポインタである必要があります。配列がuint8_tの場合、戻り値の型はuint8_t*である必要があります。これは、バイト配列( "生データ")の最も正確で安全な型です。

配列のサイズを記述するのに最も適切な型はsize_tです。この目的のために特別に存在する符号なし整数型であり、指定されたシステムの配列サイズを保持するのに十分な大きさになることが保証されています。

uint8_t* take_picture (size_t* piclength); 

又は代替

void take_picture (uint8_t* picture, size_t* piclength); 
+1

私は2番目のものが 'uint8_t *'ではなく 'uint8_t **'を取って、 '* picture'が割り当てられたものを指すようにするべきだと思います。 – Kevin

+1

@Kevin関数が何をしているのかは明らかではありません。 「この機能は、カメラが写真を撮り、アレイにデータを保存させる」という意味になります。それがオプションの場合は、発信者に割り当てを残すことが最善です。 – Lundin

関連する問題