• ベストアンサー

NULLの場合のint変数への代入

KSnakeの回答

  • ベストアンサー
  • KSnake
  • ベストアンサー率83% (5/6)
回答No.2

nullの処理をしたいのならそれでは不十分です。 int i=(!num) ? 0:*num; とするのはnumがnullの時はiが0で処理しても良いことが 保証されているときにだけすべきです。 そういった補償がないのなら以下のようにすべきでしょう。 if(num == NULL) return 0;//返す値は取り決めてください int i = *num;

seyrgr
質問者

お礼

大事なことを書くのを忘れていました。 numがNULLの時はiは0で処理してほしいです。

関連するQ&A

  • Int型のフィールドへのNULLを入れる

    テーブル t_sample のINT型のフィールド(win_rate)にNULLを入れたいと思っています。 フィールドのNULLを許可に設定し、PHPMyAdminから直接データを挿入の際に、値を入力しない場合は素直にNULLが入ってくれます。 しかし、ウェブ上でinsertを使用して $win_rate = null; (勝率計算なので、試合をしていない場合はNULLにしたい) mysql_query("insert into t_sample ( namae , win_rate ) values ( '名前' , '".$win_rate."')"); などとした場合にNULLが入ってくれず、「0」が入ってしまいます。 win_rate(勝率)のようなフィールドなので、0とNULLを区別して扱いたいのですが、 どうすればいいでしょうか?

    • ベストアンサー
    • PHP
  • char型にint型の数値を代入する。

    たとえば、 int num; char box;  numに何らかの整数値が入っているときに、そのnumの中に入っている値をchar型に文字列として代入したいときはどのようにすればいいのでしょうか?

  • NULL

    C言語で、0の代入とNULLの代入はバイナリレベルでは同じ事だと聞いたのですが本当なんでしょうか? とすると int i = 0; と int i= NULL; は、同じ事なんでしょうか。 また、 if(!aaaa){ と if(aaaa == NULL){ は同じ条件文なんでしょうか?

  • newで個別に生成した配列にNULLを代入しても大丈夫か

    C++にて要素数が不定の配列のクラスをnewで生成します。 このとき、newで一度に全ての配列を生成するとメモリをかなり取るので、 指定された要素番号のみを生成したいのでダブルポインタにし、 全体を生成してから個別にクラスを生成することで、 思い通りの処理ができるようになりました。 (生成する番号は0→1→2みたいな順列ではないため) しかし、ここで1つ問題が発生しました。 まずは以下にそのソースを示します。 ----------------------------- class CHOGE {   int a; public:   CHOGE(){ a=999; }   void print(){ cout<<a<<endl; } }; ----------------------------- void main(){   CHOGE **p = new CHOGE*[3];   if( p[0] != NULL ){ // ←条件を通過してしまう     cout << "ほげ~" << endl; // ←表示される     //p[0]->print(); // ←当然エラー   }   p[0] = new CHOGE();   p[0]->print(); // ←OK   delete p[0];   p[0] = NULL;   delete [] p;   p = NULL; } ----------------------------- 上記は3個の要素の配列を生成してから、 個別に0番目の要素のインスタンスを生成しています。 しかし、上記main関数の3行目では、 インスタンスはまだ生成していなにもかかわらず NULLチェックを通り過ぎてしまいます。 そこで上記main関数の2行目に  for(int i=0; i<3; i++) p[i] = NULL; という処理を入れると期待通りに動いてくれるのですが、 どうも引っかかるといいますか、何かの情報を消してしまったり やってはいけないことをやってそうで、不安なのです・・・。 上記のようなとき、NULLを代入しても大丈夫なのでしょうか?

  • int型のchar型への代入について

    VC++6.0のfgetcのヘルプに以下のようなコードが有りました。 int型のchをcharのbuffer[i]に代入するということに違和感を感じたのですが、 1.このようにする必要性とは何なのでしょうか? 2.このような代入により具体的には何が行われているのでしょうか? 3.そもそも1文字とりだすfgetcの戻り値がcharでなくintなのはなぜ? 質問が漠然としていて申し訳ありませんが、お願いします。  FILE *stream; char buffer[81]; int ch; 省略   stream = fopen( "fgetc.c", "r" )) 省略 ch = fgetc( stream ); 省略 buffer[i] = ch;

  • データベースのINT型項目にNULLはNG?

    以前、知り合いからデータベースのINT型の項目には出来ればNULLを許可しない(NOT NULL)方がいいと聞いたことがあるのですが、本当でしょうか? 現在不動産の物件データを登録するためのシステムを作成しており、 データベースの設計を行なっている最中なのですが、 例えば金額や面積など数字しか入力されない項目はINT型にしたいと考えています。 ※データベースはMySQLになります。 ただし、 物件データ登録時に数字項目に何も入力されなければ「NULL」、 0以上の数値を入力されている場合にはそのままその数値をデータベースに登録したいと考えています。 ※0を入力されている場合には「0」をそのまま入れたいです。 INT型の項目にはNULLを入れるのを避けた方がいい場合には、0を入れるような仕様に変更しようと考えているのですが、その辺のことについて教えて頂けると助かります。 ざっくりとした質問で申し訳ございませんが、宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • アドレスをint変数に代入する方法

    printfで表示したアドレス値を、int変数に代入するのが目的です。 #include <iostream> using namespace std; main(){ char buf[20]; char *(*pp)[2]; char *p[2]; int i; pp = &p; printf("%lu\n", pp); // i = (int)(&pp); sprintf(buf, "%lu\n", pp);//// i = atoi(buf);//// printf("%lu\n", i); } とりあえずできていますが、 pp = &p;以降の処理で、bufを使ったり非推奨?のatoi()を使っています。 pp = &p;以降の処理でもっとよい方法はないでしょうか? また、このソースは不正なことをやっていないでしょうか? 必要な初期化をやってない、などということはありませんか?

  • C++でboolにintの値を代入することについて

    VC9.0を使っているのですが、以下のような文を書くと 警告が出てしまいます。 int i = 100; //warning C4305: '初期化中' : 'int' から 'bool' へ切り詰めます。 bool a = i; この警告を出力させないために以下のようにすることに 問題はないでしょうか? int i = 100; bool a = static_cast<bool>(i); このキャストを行うとき、iの値が0ならaはfalse, iの値が0以外ならaはtrueとなることは保証されるのでしょうか? よろしくお願いいたします。

  • order by int型の降順(DESC)でnullも混ざっている時、nullは下の方にするには?

    すみません。 postgreSQLでint型をorder byする時、 null も混ざっているのですが、 null は下の方の順番(1より下(0以下はないとして))に来るようにするには、 通常どのように書くものでしょうか??? もしかしたら簡単な事かもしれなくて、 もうしわけないのですが、どなたかよろしくおねがいします。

  • MySQL Date型にNULLが設定できない。

    csvファイルからMySQLにデータを取り込む際に、Date型やint型にNULLを設定するにはどうしたらよいでしょうか。 以下のようなテーブルに | tTest | CREATE TABLE `ttest` ( `ID` bigint(20) NOT NULL, `title` text NOT NULL, `naiyou` varchar(100) DEFAULT NULL, `kaishi` date DEFAULT NULL, `owari` date DEFAULT NULL, `peirod` bigint(20) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=sjis | 以下のようなcsvファイルを読み込んだとき(*)、 10,テスト,2008-04-05,2009-04-23,43 11,テスト,2008-04-05,NULL,43 12,テスト,2008-04-05,2009-04-23,NULL 2行目のNULLで ERROR 1292 (22007): Incorrect date value: 'NULL' for column .... とエラーが発生します。 3行目のNULLでもint型ですが同様にエラーとなります。 一方、insertで行の追加以下のようにした場合は成功します。 insert into tTest values (12,テスト,'2008-04-05',NULL,NULL) 外部ファイルから読み込んだ場合にNULL値を設定するにはどのようにしたらよいのでしょうか。 (*)以下のコマンド LOAD DATA INFILE "E:\\work\\MySQL\\sample.csv" INTO TABLE tTest FIELDS TERMINATED BY "," LINES TERMINATED BY "\r\n";

    • ベストアンサー
    • MySQL