下記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";
}
}
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]); } }
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]); } }
ありがとうございます。
また、細かいコメントありがとうございます。
コードを読み解くのにとても参考になりました。
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:43:56また、細かいコメントありがとうございます。
コードを読み解くのにとても参考になりました。