この質問をするとき:
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