今暗号化のアルゴリズムを勉強したのですけど
ポインタ変数に文字列?を格納しているプログラムがあって
なぜそういうことができるのかが気になります
教えてください
例をあげます
ポインタ変数について
Re: ポインタ変数について
誤解を招きそうな言い回しかな?という気がします。涼雅 さんが書きました: 配列と同じように振る舞うのです
思ったとおりに動けばいいのですけれど。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: ポインタ変数について
だから「const」って書いてあるじゃん、という(予想される)ご回答については、box さんが書きました: 誤解を招きそうな言い回しかな?という気がします。
では、何をもって「配列と同じように振る舞う」と書かれたのですか?と申しておきます。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: ポインタ変数について
セガ本の受け売りだったのですが
一部間違ったことを言っていたようです。
現状で自分の把握した点を書いておきます。
についてですが、
まず上はa[1] ='a'のように配列の要素を書き換えることができる。
対して下はできない。
次にsizeof(a)とした時、
上では sizeof(char) * ( "some thing"の文字数=10 + nul文字=1 ) = 11となり、
下ではポインタのサイズ(環境によって異なる)になる。
また、双方とも添字を使って配列要素の値を取り出すことができる。
僕は先程、この部分だけを取り上げて、配列のように振る舞うと書きました。
誤解を招くような発言、申し訳ありませんでしたm(_ _)m。
一部間違ったことを言っていたようです。
現状で自分の把握した点を書いておきます。
についてですが、
まず上はa[1] ='a'のように配列の要素を書き換えることができる。
対して下はできない。
次にsizeof(a)とした時、
上では sizeof(char) * ( "some thing"の文字数=10 + nul文字=1 ) = 11となり、
下ではポインタのサイズ(環境によって異なる)になる。
また、双方とも添字を使って配列要素の値を取り出すことができる。
僕は先程、この部分だけを取り上げて、配列のように振る舞うと書きました。
誤解を招くような発言、申し訳ありませんでしたm(_ _)m。
Re: ポインタ変数について
文字列リテラルは配列「のようなもの」ではなくて配列です。
例えば "POIJ"[1] で 'O' を取得できます。
文字列リテラルを書き換えようとすると未定義の動作になります。
「できない」ではなく「どうなるか分からない」です。
ちなみにウィンドウズでは書き換えできます。
ただし同じ文字列リテラルを参照している他のコード部分に影響が出るか出ないかは状況によります。
前者は、文字列リテラルを収めるのにちょうどの要素数を持つ配列を宣言し、その中身を文字列リテラルで初期化します。
つまり、文字列リテラルは別にあって、初期値としてコピーされます。
後者は、文字を指すためのポインタを宣言し、文字列リテラルの先頭を指すポインタ(アドレス)で初期化します。
こちらも、文字列リテラルはどこか別のところにある、という前提ですね。
例えば "POIJ"[1] で 'O' を取得できます。
文字列リテラルを書き換えようとすると未定義の動作になります。
「できない」ではなく「どうなるか分からない」です。
ちなみにウィンドウズでは書き換えできます。
ただし同じ文字列リテラルを参照している他のコード部分に影響が出るか出ないかは状況によります。
前者は、文字列リテラルを収めるのにちょうどの要素数を持つ配列を宣言し、その中身を文字列リテラルで初期化します。
つまり、文字列リテラルは別にあって、初期値としてコピーされます。
後者は、文字を指すためのポインタを宣言し、文字列リテラルの先頭を指すポインタ(アドレス)で初期化します。
こちらも、文字列リテラルはどこか別のところにある、という前提ですね。