最近、関数の仮引数を変更する必要があるコードをいくつか調整しました。もともと、パラメータは次のようなものでした。(ノート、構造が先にtypedefされました):constへのポインタまたはconstへのconstポインタを仮パラメータとして宣言する
static MySpecialStructure my_special_structure;
static unsigned char char_being_passed; // Passed to function elsewhere.
static MySpecialStructure * p_my_special_structure; // Passed to function elsewhere.
int myFunction (MySpecialStructure * p_structure, unsigned char useful_char)
{
...
}
私は前にmy_special_structureを定義し、初期化する可能性があるため、変更が行われた時間とのMyFunctionをコンパイルし、それの値を変更したことがありません。これは、次のように変更につながった:
static const MySpecialStructure my_special_structure;
static unsigned char char_being_passed; // Passed to function elsewhere.
static MySpecialStructure * p_my_special_structure; // Passed to function elsewhere.
int myFunction (const MySpecialStructure * p_structure, unsigned char useful_char)
{
...
}
は、私はまた私があったことを私のプログラムにリントを実行したときに、いくつかの情報818のは、さまざまな機能の数を参照することに気づきました。情報には"Pointer parameter 'x'(行253)がconst" "を指すと宣言できます。
今、私は上記に関して2つの質問があります。まず、上記のコードに関しては、関数内でポインタも変数MySpecialStructure内の変数も変更されていないので、ポインタを定数として宣言すると有益でしょうか?例えば -
int myFunction (const MySpecialStructure * const p_structure, unsigned char useful_char)
私の2番目の質問は、リントの情報です。関数がその値を変更していない場合にポインタを定数仮パラメータとして宣言することには利点や欠点がありますか?関数に渡すものが決して定数として宣言されていない場合でもですか?例えば -
static unsigned char my_char;
static unsigned char * p_my_char;
p_my_char = &my_char;
int myFunction (const unsigned char * p_char)
{
...
}
ありがとうございました!
明確化のために編集 -
どのようなものがありconst
からconst
またはconst
ポインタへのポインタ宣言の利点 - 仮パラメータとしてを?私は私がができることを知っていますしかし、なぜ私はしたいでしょう...特にポインタが渡され、それが指しているデータが定数宣言されていない場合?
私は 'const'へのポインタを意味しました、ありがとう...私はもっと混乱を追加するために明確にしようとすると嫌いです。 –