ここから本文です

int str[10]: と宣言してるときには配列名strは先頭アドレスを示すとのことです...

c_c********さん

2012/8/2903:19:15

int str[10]:
と宣言してるときには配列名strは先頭アドレスを示すとのことですが。

そのような宣言時のアドレスそのものの値は変更できないのが当然ですか?

配列でなく通常の変数でも格納されているアドレスの変更はききませんか?

閲覧数:
161
回答数:
2

違反報告

ベストアンサーに選ばれた回答

khu********さん

2012/8/2912:52:24

はい。
C では、宣言時に決められた変数の「自身のアドレス」は、変更出来ません。
これは、変数でも、定数でも、関数でも、全て同様です。

変数であれば、基本的には、内容値を変更する事は可能ですが(ただし例外はあります※)、あくまで「格納されている内容値を変えられる」だけであり、格納場所をすげ替える事は出来ません。


const を付けて宣言した変数は、内容を書き換える事が出来ません。
const int a = 5;
a = 3; /* エラー */

また、配列として宣言された「配列名」も、内容を書き換える事が出来ません。
int str[ 10 ] = { 0 };
int str2[ 10 ] = { 0 };
*str = 1; /* 可能 */
str[ 1 ] = 2; /* 可能 */
str[ 2 ] = str2[ 3 ]; /* 可能 */
str = str2; /* エラー */

質問した人からのコメント

2012/8/29 20:06:12

お答えいただいて助かりました。

ベストアンサー以外の回答

1〜1件/1件中

fat********さん

2012/8/2910:56:42

実は、C言語には「文字列」を扱う専用の型が用意されていないのです。「文字列」を表現するのに文字(char型)の配列を利用して表現しているだけなのです。また、文字列の終わりを示す為に、ヌル文字 ( '\0' ) を使っています。

・C言語では、文字列は char型 の配列で表現されている。
・文字列の終端には ヌル文字 ('\0') がついている。
・文字列ではなくて、文字の変数に1文字を 代入するときは '文字' で行う。 (例. char c = 'A'; )
・文字列を扱うときは "文字列" の形式でポインタ変数で受け取る (例. char* s = "ABCDEFG"; )

じつはプログラム中に「"ABC"」が出てくると、これ全体がアドレスの値になります。何のアドレスの値かというと、'A', 'B', 'C', '\0' と連続してメモリ上に置かれた時の'A'へのポインタです。メモリ上のどこに置かれるかは分かりません、これはコンパイラやOSがうまく配置してくれます。

頑張ってくださいね。

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる