sizeof 运算符给出错误的结果

sizeof operator giving wrong results

struct val{
int first;
int second;
};
int maxChainLen(struct val p[],int n);
int main() {
    int t;
    cin>>t;
    while(t--) {
        int n;
        cin>>n;
        val p[n];
        for(int i=0;i<n;i++) {
            cin>>p[i].first>>p[i].second;
        }
         cout<<maxChainLen(p,n);
    }
    return 0;
}


int maxChainLen(struct val p[],int n){
    int x=sizeof(p);
    cout<<x<<endl;
    return 0;
}

Input
1
5
5  24 39 60 15 28 27 40 50 90

在这里,我只是在 maxChainLen() 方法中找到数组 psizeof,理想情况下应该是 p[0]5*size,即 - 5 *8 = 40 字节。 但是 sizeof(p)sizeof(p[0]) 都显示 8。 我知道这是非常基本的,但我不知道为什么 sizeof() 在这里给出错误的结果。

语法 int maxChainLen(val p[], int n) 等同于:int maxChainLen(val* p,int n) - 该函数实际上接受一个指向 val.
指针 当你调用这个函数时,你传递的数组衰减到一个指针。

您还可以查看 this answer 以了解确切的标准支持措辞。