teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

誤字の修正

2017/04/24 02:10

投稿

haru666
haru666

スコア1593

answer CHANGED
@@ -19,7 +19,7 @@
19
19
  `%p`でも`%d`でもなんでも同じです。
20
20
  printfはvoid*の解釈を文字列から推測するだけです。
21
21
 
22
- `%p%の値が同じものを2つ渡せば、当然同じ値になります。
22
+ `%p`の値が同じものを2つ渡せば、当然同じ値になります。
23
23
 
24
24
  #配列test[]のtestと&testを渡した結果が同じ理由
25
25
 

2

変な言い回しの修正

2017/04/24 02:10

投稿

haru666
haru666

スコア1593

answer CHANGED
@@ -2,15 +2,15 @@
2
2
 
3
3
  printfの文字列の右側の要素にたいした型チェックがないからです。
4
4
  printfは一番左側で渡された文字列を解析し、右側の引数が何かを判別し動作する関数です。
5
- 渡された値で決定するのではなく、文字列内`%s`が指定されて初めて文字列とします。
5
+ 渡された値で決定するのではなく、文字列内`%`から続くパラメータを見て初めて変数の存在をします。
6
6
 
7
- この値が正しい場所を指していればint型で渡そうが文字列を渡すことできます。
7
+ この値が正しい場所を指していればint型で渡そうが例えば文字列を渡すことできます。
8
8
 
9
9
  ```C
10
10
  char *str = "test";
11
11
  unsigned long value = (unsigned long)str;
12
12
 
13
- printf("%s\n", value);
13
+ printf("%s\n", value); // unsingned longだが"test"が表示される
14
14
  printf("%p\n", str);
15
15
  printf("%p\n", value);
16
16
  ```

1

追記

2017/04/24 02:08

投稿

haru666
haru666

スコア1593

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  #コンパイルが通る理由
2
2
 
3
- printfの右側の要素にたいした型チェックがないからです。
3
+ printfの文字列の右側の要素にたいした型チェックがないからです。
4
4
  printfは一番左側で渡された文字列を解析し、右側の引数が何かを判別し動作する関数です。
5
5
  渡された値で決定するのではなく、文字列内で`%s`が指定されて初めて文字列と判定します。
6
6