回答編集履歴

2

追記2

2015/09/22 06:01

投稿

sharow
sharow

スコア1149

test CHANGED
@@ -9,3 +9,37 @@
9
9
 
10
10
 
11
11
  K&R2日本語版ですと、121ページに仮引数に関して「まったく同一である」と書いてあります。注意するべきことは、それ以外についても「同一である」とは言っていないことです。仮引数以外ではちゃんと理解して使い分ける必要があります。
12
+
13
+
14
+
15
+ ---
16
+
17
+ 追記2:
18
+
19
+
20
+
21
+ ちなみにC99以降では[複合リテラル](http://seclan.dll.jp/c99d/c99d07.htm#dt19991101)が使えるので、固定長配列もリテラルとして作ることができます。配列リテラルへのポインタ、という形でint *hを初期化できます。
22
+
23
+ ```
24
+
25
+ #include <stdio.h>
26
+
27
+ int main(void)
28
+
29
+ {
30
+
31
+ int *h = (int[]){0, 1, 2, 3}; // 複合リテラル
32
+
33
+ printf("h = {%d, %d, %d, %d}\n", h[0], h[1], h[2], h[3]);
34
+
35
+ printf("sizeof(h) = %zd\n", sizeof(h));
36
+
37
+ return 0;
38
+
39
+ }
40
+
41
+
42
+
43
+ ```
44
+
45
+ ただし、複合リテラルの実体は文字列リテラルなどと違いブロック内でしか有効ではありませんので注意が必要です。

1

追記

2015/09/22 06:01

投稿

sharow
sharow

スコア1149

test CHANGED
@@ -1 +1,11 @@
1
1
  違います。 *hとh[]が同じなのは仮引数の場合です。
2
+
3
+
4
+
5
+ ---
6
+
7
+ 追記:
8
+
9
+
10
+
11
+ K&R2日本語版ですと、121ページに仮引数に関して「まったく同一である」と書いてあります。注意するべきことは、それ以外についても「同一である」とは言っていないことです。仮引数以外ではちゃんと理解して使い分ける必要があります。