sizeof(配列名)およびsizeof(ポインタ)

この質問をするとき:

32ビット環境では、int * p = new int [10]; sizeof(p)の値は()
A、4 B、10 C、40 D、8になります

正解はC、int型は32ビット、4バイトかかると思いましたが、そのうちの10バイトは当然40になります。正解はAで、これはポインタpが占めるスペースです。

テストするコードを書いてください:

#include<iostream>
using namespace std;
void fun(int P[])//P这里作为指针使用
{
cout<<"在函数中"<<sizeof(P)<<endl;
}
int main()
{
int A[10];
int* B=new int[10];
cout<<"数组名"<<sizeof(A)<<endl;
cout<<"指针"<<sizeof(B)<<endl;
fun(A);
}

または

#include<iostream>
using namespace std;
void fun(int *P)
{
    cout<<"在函数中"<<sizeof(P)<<endl;
}
int main()
{
    int A[10];
    int* B=new int[10];
    cout<<"数组名"<<sizeof(A)<<endl;
    cout<<"指针"<<sizeof(B)<<endl;
    fun(A);
}

結果の出力: 

関数4の配列名40
ポインター
4

 

配列名がポインタと完全に同じではないことがわかります。ただし、すべてポインタで配列にアクセスできます。

ただし、配列が関数パラメーターとして渡されると、ポインターに退化します。これが、ポインターがパラメーターとして渡されるときに長さが渡されることが多い理由です。(WSJ注:ポインターが仮パラメーターとして使用される場合は、通常、仮パラメーター(このポインターの長さ)を追加します)

送信元:http://blog.csdn.net/kangroger/article/details/20653255

42件のオリジナル記事を公開 いいね10 10,000人以上の訪問者

おすすめ

転載: blog.csdn.net/qq_37659294/article/details/102328093