« 長時間の運転は疲れる | トップページ | Excel 2007のバグ »

2007/09/27

配列の動的確保

配列の要素数をscanfで入力させて・・・

一度はこれをやって「セグメンテーション違反です」とコンパイラに怒られたのではないでしょうか。私も過去にこれをやって怒られたくちです。

ところが、動的確保は意外と簡単に実現できるものです。

//配列オブジェクトの生成

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
  int *x;
  int i, nx;

  printf("生成する要素数:");
  scanf("%d", &nx);

  //---動的確保---
  x = calloc(nx, sizeof(int));

  if(x == NULL){
    printf("確保失敗\n");
  } else {
    //---値を代入---
    for(i=0 ; i<nx ; i++) {
      x[i] = i;
    }
    //---解放---
    free(x);
  }

  return 0;
}

このプログラムで重要なのはcalloc関数です。これは、”指定した型で要素数ぶんの領域を確保する”ということです。いまはintを指定していますが、実数を扱いたければsizeof(double)とすればいいわけです。また、calloc関数は確保した領域を0で初期化します。if文は例外処理で、まぁ保険みたいなものと思ってください。最後に、使い終わった領域はかたずけましょう。かたずけは”free関数”がやってくれるので忘れずに書いてください。

動的確保も結局、「配列の要素数をscanfで入力させて・・・」でしたね。

|

« 長時間の運転は疲れる | トップページ | Excel 2007のバグ »

C」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/222903/16588699

この記事へのトラックバック一覧です: 配列の動的確保:

« 長時間の運転は疲れる | トップページ | Excel 2007のバグ »