匿名質問者
匿名質問者匿名質問者とは「匿名質問」を利用して質問した質問者。
「匿名質問」では、ユーザー名を公開せずに匿名の質問ができます。
詳しくはこちら

Cの配列の渡し方について教えて下さい。

下記Perlの例をCで書くとどのようになりますか。
ポインタ扱いで失敗してると思うのですが、どのようにすればいいでしょうか?
また、もし良ければ最もシンプルな書き方を教えて下さい。
宜しくお願い致します。

# Perl
my @ary = (5,4,3,2,1,0);
Test(@ary);
sub Test(){
my @test = @_;
my $aryLen = @test;
my $i;
for ($i =0; $i < $aryLen; $i++){
print "$test[$i]\n";
}
}
// Cではどのようになりますか?
#include <stdio.h>
int ary[] = {5,4,3,2,1,0};
void main(){
Test(ary);
}
Test(int test[]){
int aryLen = sizeof(test) / sizeof(test[0]);
// printf("%d\n", sizeof(test));
// printf("%d\n", sizeof(test[0]));
int i;
for(i = 0; i < aryLen; i++){
printf("%d\n", test[i]);
}
}




# Perlだとかなりシンプルに書けますがCでは?
my @ary = (5,4,3,2,1,0);
Test(@ary);
sub Test(){
for (@_){
print "$_\n";
}
}

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2016/02/13 19:09:54
  • 終了:2016/02/14 17:45:34

ベストアンサー

匿名回答1号 No.1

匿名回答1号「匿名質問」を利用した質問に回答すると「匿名回答○号」と匿名で表示されます。
「匿名質問」では、ユーザー名を公開せずに匿名の質問ができます。
詳しくはこちら
2016/02/13 20:19:56

http://wisdom.sakura.ne.jp/programming/c/c46.html
http://www.g-ishihara.com/c_ar_02.htm

#include <stdio.h>
// 配列の要素数を求めるマクロ
#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
// mainより後に関数を書くときはプロトタイプ宣言しておきます
void Test(int *test,int testLen);

void main(){
    // グローバル変数にするならTest関数に引数はいりません
     int ary[] = {5,4,3,2,1,0};
    // sizeof 演算子は外部配列のサイズは返せません
     int aryLen = ARRAY_SIZE(ary);
    // 通常は呼ぶ側で渡してあげます
    Test(ary,aryLen);
}

void Test(int *test,int testLen){
    int i;
    
    for(i = 0; i < testLen; i++){
        printf("%d\n", test[i]);
    }
}
匿名質問者

ありがとうございます。
また、細かいコメントありがとうございます。
コードを読み解くのにとても参考になりました。

2016/02/14 17:43:56

その他の回答(1件)

匿名回答1号 No.1

匿名回答1号「匿名質問」を利用した質問に回答すると「匿名回答○号」と匿名で表示されます。
「匿名質問」では、ユーザー名を公開せずに匿名の質問ができます。
詳しくはこちら
2016/02/13 20:19:56ここでベストアンサー

http://wisdom.sakura.ne.jp/programming/c/c46.html
http://www.g-ishihara.com/c_ar_02.htm

#include <stdio.h>
// 配列の要素数を求めるマクロ
#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
// mainより後に関数を書くときはプロトタイプ宣言しておきます
void Test(int *test,int testLen);

void main(){
    // グローバル変数にするならTest関数に引数はいりません
     int ary[] = {5,4,3,2,1,0};
    // sizeof 演算子は外部配列のサイズは返せません
     int aryLen = ARRAY_SIZE(ary);
    // 通常は呼ぶ側で渡してあげます
    Test(ary,aryLen);
}

void Test(int *test,int testLen){
    int i;
    
    for(i = 0; i < testLen; i++){
        printf("%d\n", test[i]);
    }
}
匿名質問者

ありがとうございます。
また、細かいコメントありがとうございます。
コードを読み解くのにとても参考になりました。

2016/02/14 17:43:56
匿名回答3号 No.2

匿名回答3号「匿名質問」を利用した質問に回答すると「匿名回答○号」と匿名で表示されます。
「匿名質問」では、ユーザー名を公開せずに匿名の質問ができます。
詳しくはこちら
2016/02/14 02:52:37

cだとシンプルに書けません
cには配列型が無くポインタを使うしかないからです

c++(厳密にはc++11)だとvectorを使えばそれなりにシンプルに書けます

#include <stdio.h>
#include <vector>

void test(std::vector<int>& array) {
     for (auto i: array) 
	  printf("%d\n", i);
}

int main() {
     std::vector<int> array {5,4,3,2,1,0};
     test(array);
     return 0;
}
匿名質問者

ありがとうございます。
Cには配列型がないのですか・・・
今回はArduinoで使う予定だったのですが、コンパイラーを通りませんでしたが、C++を使う際には参考にさせて頂きます!

2016/02/14 17:45:26
  • 匿名回答2号
    匿名回答2号 2016/02/14 01:03:37
    いまどき c も c++ も境目はたいしてないのだから vector と iterator 使うのが健全だと思う。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません