ページ

2014年3月25日火曜日

ActiveBasic to C++:配列が・・・

ActiveBasic:
#console
'配列を10個宣言する
Dim array[9] As Integer
'アクセスする
Print array[0]
Print array[1]
Print array[2]
Print array[3]
Print array[4]
....
Print array[9]



C++:
#include <iostream>
//配列を10個宣言する
int array[10];
int main(void){
 //アクセスする
 std::cout << array[0] << std::endl;
 std::cout << array[1] << std::endl;
 std::cout << array[2] << std::endl;
 ....
 std::cout << array[9] << std::endl;
.....

まさかこんな仕様になっていたとは、、、 ActiveBasicとの差はこんなところにも出ていたんですね。
ゼロクリアでなぜか Segmentation fault が出てきて、何でだろうと思っていたらこういうことだったんですね。
というのは

6個の配列を宣言してゼロクリアする.cpp
C++(間違い):
#include <iostream>
#include <string>

std::string array[5]; //これでできる配列の数は array[0] ~ array[4] の5個
int i;

int main(void){
 for (i=0;i<=5;i++){ //i==5のときエラーが起きる
  array[i]="";
 }
return 0;
}

C++(正解):
#include <iostream>
#include <string>

std::string array[6]; //これでできる配列の数は array[0] ~ array[5] の6個
int i;

int main(void){
 for (i=0;i<=5;i++){ //これならOK
.....

C++では配列の宣言は個数を指定する。ということです。

ActiveBasicでは 個数-1 を入れて宣言する仕様でした。ActiveBasicでC++風の宣言をするなら

AciveBasic:
#console
Dim array[ELM(10)] 'ELM() 関数は個数を直接指定して宣言できる。

となります。

今回はここまで。

0 件のコメント:

コメントを投稿