【问题标题】:C++ Constructor from char* to int[]/int*从 char* 到 int[]/int* 的 C++ 构造函数
【发布时间】:2018-05-30 12:22:00
【问题描述】:

我有一个带有参数char*(只有数字)的构造函数,我想做一个简单的数学运算。我想在构造函数int[]/int* 中添加新参数以使其更容易。

标题:

class BigNum {
    char *value;
    int* arr;

    public:
        BigNum(char*, int * = 0) {};
        BigNum();
};

cpp:

BigNum::BigNum(char* value, int *tab){
    int length = sizeof(value) / sizeof(char*);
    for (int i = 0; i < length; i++) {
        arr[i] = value[i];
    }
}

我可以这样做吗?它甚至不编译。 我可以对这个示例做些什么,将char* 更改为int

【问题讨论】:

  • 为什么不寻找长度直到空字符,如果选项卡与值的长度不同,你会有一些未定义的行为
  • Int* 应该是什么?
  • 欢迎堆栈溢出。在发布问题之前,请阅读帮助部分。虽然您的问题不是一个糟糕的第一个问题,但我不明白您要完成什么。您能否通过示例将其添加到问题的开头?
  • int length = sizeof(value) / sizeof(char*); 这不会计算数组的大小。这是一个常数值 1。您的目标 int length = sizeof(value) / sizeof(char); 也不会计算大小。不幸的是,它也是一个常数值。见:stackoverflow.com/questions/14298710/…

标签: c++ casting char


【解决方案1】:

它甚至没有编译

它无法编译,因为您已经定义了两次BigNum(char*, int *)。一次在标头中,然后在源文件中。

解决方案:只定义一次构造函数。额外提示:当程序无法编译时,编译器会在诊断消息中告诉您原因。


这并不像你认为的那样:

int length = sizeof(value) / sizeof(char*);

length 将始终为 1,因为 value 的类型是 char*。我怀疑您的意图是 value 指向一个数组,并且您想要计算该数组的长度。好吧,从指向该数组元素的指针计算数组的长度是不可能的。

解决方案:您必须 a) 将数组的长度作为参数传递或 b) 指定数组必须是终止字符串,在这种情况下,您可以通过迭代字符串来计算长度,直到找到终止字符.


你访问arr[i]而不初始化arr

arr[i] = value[i];

行为未定义。

解决方案:你必须分配一个数组。


我可以对这个示例做些什么将 char* 更改为 int。

这取决于你想如何改变它。如果您想将一个指向的字符数字转换为int,您可以使用数字在所有本机字符编码(C++ 支持)中必须是连续的这一事实。由此可知,将0字符的值减去数字字符的值,得到数字字符所代表的数值:

char* c = address_of_some_digit;
int value_of_digit = '0' - *c;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 2013-08-17
    相关资源
    最近更新 更多