質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

3回答

818閲覧

c言語のポインタ型のキャスト

rikaruto

総合スコア16

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2019/11/06 15:14

c

1#include <stdio.h> 2 3 4int main(void){ 5 unsigned long a = 0; 6 unsigned char c[16]; 7 8 a = *((unsigned long * )&c[0]); 9 printf("%x\n",a); 10 a = *((unsigned long * )&c[1]); 11 printf("%x\n",a); 12 a = *((unsigned long * )&c[2]); 13 printf("%x\n",a); 14 15 return 0; 16}

a = *((unsigned long * )&c[0]);
↑この部分がアドレスを入れているのか値をいれているのかがわかりません。
どちらになるのでしょうか。
また、実行したら下記のようになりました。
40197b
10004019
19100040
これはどういう理屈でこの値になるのでしょうか。
ご教授お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

C言語では、ローカル変数にはでたらめな値が入ってます

投稿2019/11/06 23:05

y_waiwai

総合スコア87784

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazuma-s

2019/11/07 00:21

int a; // 外部結合のグローバル変数 static int b; // 内部結合のグローバル変数 void func(void) {   int c; // 自動変数(ローカル変数)   static int d; // 静的なローカル変数 } でたらめな値が入っているのは自動変数です。 ローカルかどうかは関係ありません。 グローバル変数は static があろうがなかろうが静的変数で ローカル変数でも静的であれば、初期化されます。
guest

0

補足

c

1int main(void){ 2 unsigned long a = 0; 3 unsigned char c[4]; 4 5 c[0] = 2; 6 c[1] = 3; 7 c[2] = 4; 8 c[3] = 255; 9 10 a = *((unsigned long * )&c[0]); 11 printf("%x\n",a); 12 //a = *((unsigned long * )&c[1]); 13 //printf("%x\n",a); 14 //a = *((unsigned long * )&c[2]); 15 //printf("%x\n",a); 16 17 return 0; 18}

こうすると結果は下記のようになりました。
ff040302

投稿2019/11/06 15:42

rikaruto

総合スコア16

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

この部分がアドレスを入れているのか値をいれているのかがわかりません。

&を付けて*を付けているので、値ですね。

これはどういう理屈でこの値になるのでしょうか。

これは、c[16]と宣言されたメモリ部分に、たまたま入っていた値です。

意味のないプログラムなので、考えてもしょうがないです。

投稿2019/11/06 15:31

otn

総合スコア84645

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rikaruto

2019/11/06 15:39

メモリの中にたまたま入っていた値なんですね! 納得しました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問