前提
関数の配列入力、配列のサイズについて疑問があります。
実現したいこと
標準入力でのサイズをそのまま関数の入力にしてしまうやり方と、関数の中でサイズを求めるやり方を二つ試すとサイズが違ってしまったのですがなぜかわかりません。
関数の中でサイズを求めると1になってしまったのでsizeof(a)がsizeof(int)と同じサイズになったようです。
そもそもメイン関数で配列を与えて、関数の入力でその配列を与えるやり方においてfor文のような配列の要素を比べる操作はできるのに、なぜ配列のサイズは求められないのでしょうか。
発生している問題・エラーメッセージ
$ g++ maximumprofit.cpp maximumprofit.cpp: In function 'int size(int*)': maximumprofit.cpp:17:20: warning: 'sizeof' on array function parameter 'a' will return size of 'int*' [-Wsizeof-array-argument] 17 | int s= sizeof(a)/sizeof(int); | ^ maximumprofit.cpp:16:14: note: declared here 16 | int size(int a[]){ | ~~~~^~~ maximumprofit.cpp:19:1: warning: no return statement in function returning non-void [-Wreturn-type] 19 | }
該当のソースコード
c++
1#include <iostream> 2#include <type_traits> 3using namespace std; 4 5int maxv(int a[], int size){ 6 int i, j; 7 int max=a[1]-a[0]; 8 for(j=2; j<size; j++){ 9 for(i=0; i<j; i++){ 10 if(max < a[j]-a[i]) max = a[j]-a[i]; 11 } 12 } 13 return max; 14} 15 16int size(int a[]){ 17 int s= sizeof(a)/sizeof(int); 18 cout << s << "\n"; 19} 20 21int main(){ 22 int a[200000], n; 23 cin >> n; 24 for(int i=0; i<n; i++){ 25 cin >> a[i]; 26 } 27 cout << maxv(a, n) << "\n"; 28 size(a); 29 return 0; 30}
試したこと
実際にサイズを出力してみるとsizeof(a)/sizeof(int)は1になったためsizeof(a)は1であるとわかった

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。