C++用sizeof取二维数组长度问题
#include <iostream>
#include <cstring>
using namespace std;
class Book
{
private:
    char name[10];
    char author[5][3];
    int author_total;
    int price;
public:
    void setName(char *name1){
        strcpy(name,name1);
    }
    void setAuthor(char author1[][10])
    {
        author_total = (sizeof(author1)/sizeof(char))/(sizeof(author1[0])/sizeof(char));
        cout << author_total<<endl;//这里输出0
        for(int i=0;i<author_total;i++)
        {
            strcpy(author[i],author1[i]);
        }
    }
    void setPrice(int p)
    {
        price = p;
    }
    int Output()
    {
        cout<<"Name:"<<name<<endl;
        cout<<"autor:";
        for(int i=0;i<author_total;i++)
        {
            cout<<author[i]<<" ";
        }
        cout<<"\nPrice:"<<price<<endl;
        return 0;
    }

};

int main()
{
    Book temp;
    char author[][10] = {"a1","a2","a3","a4","a5","a6"};
    temp.setName("ABCD");
    temp.setPrice(10);
    temp.setAuthor(author);
    cout<<(sizeof(author)/sizeof(char))/(sizeof(author[0])/sizeof(char))<<endl;//这里输出正确输出6
    temp.Output();
    return 0;
}



为什么把二维数组作为参数传到函数中,取出来的不一样呢,要怎么解决

1个回答

在函数内,数组退化为指针,sizeof没办法得到数组的长度。
要么主程序传进去,要么像字符串那样,用一个特殊的值标记结束的位置。

如果你经常阅读别人的源代码,包括库函数的函数,你经常可以看到一个函数,除了传入数组(指针)以外,还要传入数组长度的参数。
你想,要是有办法直接获取,岂不是多此一举。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐