sizeof运算符给出错误的结果

问题描述 投票:0回答:1
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

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

data-structures sizeof
1个回答
1
投票

语法int maxChainLen(val p[], int n)等效于:int maxChainLen(val* p,int n)-该函数实际上接受valpointer。调用此函数时,会将decays传递给指针。

您也可以看到this answer以获取标准支持的确切措辞。

© www.soinside.com 2019 - 2024. All rights reserved.