tilblackout
tilblackout
采纳率88%
2019-03-29 12:54 阅读 2.8k

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条回答 默认 最新

  • 已采纳
    caozhy 从今以后生命中的每一秒都属于我爱的人 2019-03-29 13:14

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

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

    点赞 评论 复制链接分享

相关推荐