:*(a ++)はエラーを出すが、*(a + 1)を出さない?ここでaは配列名ですか?次のコードで
void main()
{
char a[]={1,5,3,4,5,6};
printf("%d\n",*(a++)); //line gives error: wrong type argument to increment
printf("%d\n",*(a+1));
}
ライン4とライン5との違いは、私はすべてのエラーを取得またはライン5
:*(a ++)はエラーを出すが、*(a + 1)を出さない?ここでaは配列名ですか?次のコードで
void main()
{
char a[]={1,5,3,4,5,6};
printf("%d\n",*(a++)); //line gives error: wrong type argument to increment
printf("%d\n",*(a+1));
}
ライン4とライン5との違いは、私はすべてのエラーを取得またはライン5
a
と警告していないです何であるので、配列オブジェクトではなくポインタであります配列オブジェクトに操作a++
を使用できませんでした。等価であるので:あなたは、アレイに割り当てるここで
a = a+ 1;
あなたa
配列の要素1へのポインタリターン
a + 1
C.
'a' は、 constポインタのように動作します。 'a'は値またはポイントしているアドレスを変更できません。これは、コンパイラが静的に配列のサイズのメモリを割り当てており、参照先のアドレスを変更しているためです。
代わり
void main()
{
char a[]={1,5,3,4,5,6};
char *ch;
ch=a;
printf("%d\n",*(ch++)); //this lines gives error no more
printf("%d\n",*(ch+1));
}
'a'は決してconstポインタではありません。それは配列です。 –
@ H2CO3私は 'a'をconstポインタと仮定しました。私はそれをconstポインタと呼んでいませんでした。 –
でもそれは間違っています... –
オーケー真剣に悪いコーディングプラクティスを、次のようにあなたがそれを行うことができますへの暗黙の参照であるため、
printf("%d\n",*(a++)); //this lines gives error: wrong type argument to increment
を使用することはできません。しかし、まずは、あなたの問題に対処しましょう配列。あなたはこの行うことができます
:+
一方のオペランドを変更する++
試みは、単に一定のa
値に1を追加しますので、また*(a++)
を
char b[]={1,5,3,4,5,6};
char *a = b;
printf("%d\n",*(a++)); //this lines will not give errors any more
とあなたが行くオフ...
は*(a+1)
と同じではありません。
また、 'a ++'は 'a'の古い値を評価し、' a'の値はインクリメントされます(ポストインクリメント) – Joe
私はC言語では良くありませんが、おそらくダブルインクリメント(つまり、 '++'演算子)配列を使うことはできません。 – Voitcus
トピックは完全にオフですが、 'void main()' ==悪い! 'void main()'と考えると、誰かがあなたをスティックで叩くのを描きます。 'int main()'、いつも! – Yuushi