- ベストアンサー
C言語で表現できますか!?
素人なので、変な質問しているのか、自分でも判断できません!? PHPの整数型へのキャストプログラム~ <?php $int1 = intval("1"); $int2 = (int)"1"; 以上ですが、同じようなプログラムをC言語でもできますか! もしできれば、 どんなプログラムになるのでしょうか!? 宜しくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
Cでの扱いは他の回答者さんが述べられている通り なので、ここでは違いを述べます。 先ず、PHPではデータ型はありません。内部的には 文字型、整数型、実数型、オブジェクト型、資源型 配列型の区別がありますが、プログラムとしては 考えなくていいようになっています。 $a = "1"; $b = 3 + $a; 型のウルサイ言語ですと、エラーになるところですが、 ちゃんと$b=4になります。 勿論、計算に使う時は型変換が行われるので、その 分だけオーバーヘッドがあります。だから、計算に使う と分かっていれば最初から整数型にして、このロスを 防ぎたいと思いますよね。そういう人向けにintvalとか キャストにより、明示的に整数化する手段が用意されて いる訳です。 C言語では文字の"1"と数値の1は全く別のものなので、 自力で型変換処理をしなければなりません。また、 関数などでは引数や戻り値の型指定がウルサイため、 キャストしないとコンパイルエラーになったりします。 >C言語でもできますか いえ、C言語ではやらなければいけないのです。 因みにPHPでは「やってもいいし、やらなくてもよい」です。
その他の回答 (3)
- nda23
- ベストアンサー率54% (777/1415)
Webでやらなくてもイイのでは? <php $a = "1"; $b = 3 + $a; print($b); ?> こういうソースファイル(仮にhoge.php)を作って、 コマンドプロンプトからphp hoge.phpと入力すれば $bの内容が表示されますよ。勿論、phpにパスが 通っていることが前提です。 尚、Webプログラムの方はエラーになった理由と 行番号が表示されるはずなので、それを掲示 してください。
- kmee
- ベストアンサー率55% (1857/3366)
C言語には「文字列」という型はありません。 特定条件を満す 「文字の配列」を文字列して扱う、という基本ルールがあるだけです。 また、文字、と書きましたが、「文字」という型もありません。 文字に対応した数値を扱える「整数型」があるだけです。 つまり、Cの文字列とは「整数の配列」です。 さらに、C言語の配列とは... ...とPHPとの違いが多過ぎるので、注意しましょう。 「標準的な文字列」を解析して、「数値を文字列にしたもの」を「数値」に変換することはできます。 標準ライブラリには、atoi,strtol等の関数が用意されています、 標準的では無い文字列から変換する場合は、自作する必要があるでしょう。 int2 = (int)"1"; Cでこのようにやると、意味が違ってきます。 文字列を整数にするのではなく、 文字列は配列→配列は先頭要素のアドレス(数値)として表現される→「アドレス」をそのまま数値に変換 となります。 PHP自体は、主にC言語で作られています。 ということは、PHPでできる事は、C言語でもできる、ということです。 「簡単」かどうかはともかく。
お礼
ご回答誠にありがとうございました。 補足ですが、人、間違いで補足してしまい、お詫びいたします。
補足
ご回答ありがとうございました。 以下ご紹介していただいた ご回答の $a = "1"; $b = 3 + $a; ちゃんと$b=4になります。 以上のご回答が実際に4になるか確かめたかったので プログラムの組み方がよくわかりませんでしたが、 プログラムを以下に組みました。しかしエラーがでました。 なぜエラーがでるか教えていただけますか!? <!DOCPYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "html//www.w3.org/TR/xhtml1.DTD/xhtml1-transitional.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> </head> <body> <?php $a = "1"; $b = 3 + $a; echo $b, PHP_EOL; ?> </body> </html> 以上よろしくお願いたします。
C言語では "1" と '1' の意味は異なります。前者は「char型配列」「char型ポインタ」、後者は「char型の値」となります。まずはこちらをご覧ください。 ASCIIコード表 http://www9.plala.or.jp/sgwr-t/c_sub/ascii.html 整数の「1」と、バイトコード「49」で表される文字の「'1'」は全く異なることに注意してください。 ・int型として扱うとき、バイトコード「1」は整数の「1」を表す。 ・int型として扱うとき、バイトコード「49」は整数の「49」を表す。 ・char型として扱うとき、バイトコード「1」は制御文字「SOH」を表す。 ・char型として扱うとき、バイトコード「49」は文字「'1'」を表す。 厳密に表せば上記のようになっています。これをどうやってキャストするか、 "1" と '1' でそれぞれ見ていきましょう。 【"1"】 C言語にstring型は無く、バイト単位でみて 49 00 という2文字分のchar型配列になります。文字列リテラルとして定義したchar型配列の末尾にはNULL文字が自動的に挿入される決まりになっています。このような配列からint型の値に変換するには、atoi関数を使います。これはstdlib.hで定義されているので、それをincludeする必要があります。 atoi http://hitorilife.com/atoi.php 例: int num = atoi("1"); // 整数の「1」として代入されます 【'1'】 こちらは1バイト 49 で表されるchar型の値ですが、この「'1' (49)」を「1」に直したければ「'0' (48)」を引けば済みますよね。というわけで '1' - '0' とすればint型にキャストしたことになります。PHPの演算規則と全く異なるので注意してください。C言語では文字は単なる「バイト値」に過ぎません。
補足
ご回答ありがとうございました。 以下ご紹介していただいた ご回答の $a = "1"; $b = 3 + $a; ちゃんと$b=4になります。 以上のご回答が実際に4になるか確かめたいのですが! どんなプログラムを組めば確かめられますか? PHPバージョンは昨年夏ぐらいに最新版をいれました。 それから更新した記憶はございません。 以上よろしくお願いたします。