从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 ++构造函数的主要内容,如果未能解决你的问题,请参考以下文章
c语言中 int型变量与char型变量啥情况下不能互换,请举个例子说明(详细点)