質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

4回答

394閲覧

関数の引数に取った配列の要素数を取得したい。

退会済みユーザー

退会済みユーザー

総合スコア0

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/09/30 11:18

提示コードのpirntf();関数のtest1 test2の部分ですが「関数の引数として来た配列の要素数を取得したいのですがなぜ出来ないのでしょうか?」またmemcpy();を使った値のコピーも出来ません。e[0]は1と表示されますがe[1]はゴミの値が表示されてしまいます。
配列のコピーと配列の要素数の取得はどうすれば出来るのでしょうか?

またmain関数のコードではちゃんと正しい値が表示されるのですが関数の引数として来た場合どうすればいいのでしょうか?

cpp

1#include <iostream> 2 3int idx[20] = 4{ 5 1,2,3,4,23,5,34,6 6}; 7 8 9void test(int rr[100]) 10{ 11 //printf("%d\n",rr[2]); 12 13 int e[100]; 14 memcpy(e, rr, sizeof(rr)); 15 printf("%d\n", e[3]); 16 17 printf("test1 : %d\n", sizeof(*rr) / sizeof(rr[0])); 18 printf("test2 : %d\n", sizeof(rr) / sizeof(rr[0])); 19 20} 21 22int main() 23{ 24 printf("main %d\n",sizeof(idx) / sizeof(idx[0])); 25 26 27 test(idx); 28 29 30 31 32 33 return 0; 34} 35

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

c++

1template<size_t N> 2void test(int (&rr)[N]) 3{ 4 int e[100]; 5 memcpy(e, rr, sizeof(rr)); 6 printf("%d\n", e[3]); 7 printf("test1 : %ld\n", sizeof(*rr) / sizeof(rr[0])); 8 printf("test2 : %ld\n", sizeof(rr) / sizeof(rr[0])); 9}

投稿2020/09/30 12:12

asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

要素数の取得

文字列と同様、終端記号(配列に現れない値)を入れて呼ばれたほうで要素数を数えるか、要素数を別引数として渡すぐらいですね。

投稿2020/09/30 11:29

編集2020/09/30 11:34
cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

C

1#include <stdio.h> 2 3void test(int rr[100]) { 4 printf("%zd\n",sizeof(rr)); 5} 6 7int main() { 8 int array[20]; 9 test(array); 10 return 0; 11}

コレ↑の結果どうなりますか? 100 あるいは 100*sizeof(int) が返ってはこないでしょう。
配列の要素数は sizeof では得られません。

投稿2020/09/30 11:27

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

引数の配列の要素数はとれません。要素数を別の引数として与える必要があります

投稿2020/09/30 11:21

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/09/30 11:56

std::vector<>でやります。
y_waiwai

2020/09/30 11:59

それがよろしいかと
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問