ポインター関連のブログ
最初の質問
1. 次のポインタが指す内容を変更できます()
A:const int* a
B:int const* b
C:int* const c
D:const int* const d
解答と分析 C
const は * の左側にあり、ポインタが指す内容は変更できません。
* の右側に const がある場合、ポインタ自体は変更できません
質問2
2. 変数 a と b が両方とも整数であり、式の値が () であると仮定します。
(a = 5, b = 2, a > b ? a++ : b++, a + b)
答え:7
B:8
子:9
D:2
解答と分析 B
この質問では、カンマ式を調べます。カンマ式では、各式の結果を順番に計算する必要がありますが、カンマ式の結果は、最後のカンマの後の式の結果になります。それらを順番に評価する理由は、前の式が最後の式の結果に影響を与えるためです。
質問3
3. 以下のプログラムの出力結果は( )です。
#include <stdio.h>
int main()
{
unsigned char a = 235;
unsigned char b = ~a;
unsigned char c = b >> 1;
printf(“%d”, c);
}
答え:6
B:2
子:4
D:10
回答と 分析D
この問題では、符号なし数値のビット演算を調べます。まず、符号なし数値の 2 進ビットの最上位ビットは、符号ビットではなく数値ビットであることを知っておく必要があります。次に、char 型には 1 バイトと 8 ビットがあります。
a :1 1 1 0 1 0 1 1
b : 0 0 0 1 0 1 0 0
c : 0 0 0 0 1 0 1 0
c = 10
質問4
4. 次の定義の場合、次のオプションのどの表現がコンパイラによって禁止されるか () [複数選択]
int a = 248, b = 4;
int const c = 21;
const int *d = &a;
int *const e = &b;
int const * const f = &a;
A:*c=32
B:*d=43
C:e=&a
D:f=0x321f
E:d=&b
F:*e=34
回答と分析 ABCD
const は * の左側にあり、ポインタが指す内容は変更できません。
* の右側に const がある場合、ポインタ自体は変更できません
質問5
5. 次のプログラムの出力は () です。
#include <stdio.h>
struct HAR
{
int x,y;
struct HAR *p;
} h[2];
int main()
{
h[0].x = 1;
h[0].y = 2;
h[1].x = 3;
h[1].y = 4;
h[0].p = &h[1];
h[1].p = h;
printf("%d,%d \n", (h[0].p)->x, (h[1].p)->y);
}
答え:1,2
B:2,3
子:1,4
D:3,2
回答と 分析D
これは構造体の配列であり、それらに 1 つずつ値が割り当てられると、結果は次のようになります。
出力ステートメントでアクセスします。