从char *到int [] / int *的C ++构造函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从char *到int [] / int *的C ++构造函数相关的知识,希望对你有一定的参考价值。

我有一个带参数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

答案

它甚至没有编译

它没有编译,因为你已经定义了两次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;

以上是关于从char *到int [] / int *的C ++构造函数的主要内容,如果未能解决你的问题,请参考以下文章

将 char 转换为 int [C]

c语言中 int型变量与char型变量啥情况下不能互换,请举个例子说明(详细点)

c++ 如何把一个int转为char*

char到int的转换

如何从 python 调用带有 Char** 参数和 int* 参数的 C 方法?

将 char 与 int 相加的 C 程序