1

この行はどういう意味ですか? 私は数年間Cをやっていません。括弧で操作を実行してから、intの結果をポインターにしますか??

b[0] = *(start + pos++);
4

5 に答える 5

8

どうやらstartはポインター (または、とにかくここではポインターに減衰する配列) であり、式 in の結果は()ポインターではなく、int. は*単にそのポインターを逆参照します。

全体は plain と同等ですb[0] = start[pos++]が、何らかの理由で、投稿のように難読化された形式を使用することを好む人もいます。

于 2009-12-12T22:35:48.963 に答える
5

start がポインタで pos が整数であると仮定すると、次のように簡単に書き換えることができます。

b[0] = start[pos++];

これが理解に役立つことを願っています。

于 2009-12-12T22:36:30.740 に答える
3

これが意味を持つためには、startorposがポインタでなければなりません。ほとんどの場合、それはなりますstart。コードは次のように記述できます。

b[0] = start[pos];
pos = pos + 1;

実際には、posC の配列サブスクリプションのややおかしなセマンティクスのために、ポインターであってもコードは同等です。

于 2009-12-12T22:36:47.183 に答える
2

演算子「*」は、演算子に続くポインタまたは式が指す位置の値を返します。

いくつかの例:

value = *pointer;
value = *(pointer);     // Exactly the same as the first statement.
value = *(pointer + 0); // Take contents of pointer and add zero then dereference.
value = *(pointer + 1); // Deference the first location after the location in pointer.

特に組み込みシステムでは、配列表記を使用するよりも読みやすい場合があります。例: status = *(UART + STATUS_REGISTER_OFFSET);

于 2009-12-12T22:50:55.570 に答える
1

これらの式が同等であることに注意してください。まず、次の宣言が使用中の型を確立すると仮定します。

T* const base;
size_t const pos;

T現在、メモリ内の位置にあるタイプのオブジェクト

base + sizeof(T) * pos

いくつかの方法でアクセスできます。

base[pos]                            // Interpret base as an array.
*(base + pos)                        // Pointer arithmetic strides by sizeof(T)
*(T*)((char*)base + sizeof(T) * pos) // Compute stride manually
于 2009-12-12T23:11:11.507 に答える