0

次のような方法はありますか:

char* a = "Hello";
char* b = NULL;
char* c = a | b;

Result should be c = "Hello";

Char* では動作しないようですが、そのような方法はありますか?

4

3 に答える 3

1

これは、ポインターのビット演算子が非常に... 興味深い... 結果をもたらすだけでなく、主にNULL が 0 で表されることが保証されていないため、ナンセンスです。

于 2013-06-11T01:35:28.757 に答える
1

三項演算子を使用して可能です。以下のコードは、a == NULL の場合はcbに設定し、それ以外の場合はcaに設定します。

char *c = (a == NULL)? b : a;

ここで、ビット単位の演算子を明確にします: | および & は、オペランドのビットに作用します。a = 10000001 (128) と b = 10000010 (129) という 2 つの変数があるとします。a と b の型は問題ではなく、それらの値のビット表現のみが重要です。

| | b = 10000011、つまり、a と b のビット間でビットごとの OR を取ります。

a & b = 10000000、つまり、a と b のビット間でビットごとの AND を取ります。

これらの演算子は、変数の値のビットを直接操作する場合に意味があります。C では、ポインタの値はメモリのチャンクのアドレスであり、チャンクの内容ではありません。ポインターにビット演算を適用するということは、ポインターが保持するアドレスにビット演算を適用することを意味します。この操作の結果は、メモリ上のほぼすべての場所を指す可能性があり、このポインターを使用すると、セグメンテーション フォールト(または少なくともジャンク データ) が発生する可能性があります。

于 2013-06-11T02:02:47.853 に答える