C++中混合数据类型的算术运算
Arithmetic operation on mixed data type in C++
我想了解算术运算在不同数据类型上是如何发生的,
#include<iostream>
#include<string>
#include<conio.h>
using namespace std;
void newprintf(int, int, long, char *);
int main()
{
int i = 22;
newprintf(14, 30, (long) i, "9,999");
getch();
return 0;
}
void newprintf(int r, int c, long val, char *format)
{
char *p, str[20];
int len, i, j, lstr;
len = strlen(format);
_itoa(val, str, 10);
lstr = strlen(str);
p = str;
c += len;
p = str + lstr -1;
format = format + len - 1;
cout << "The value in p : " << p << endl;
cout << "The format is : " << format << endl;
}
基本上这个程序没有特定的功能,我只是想了解'p'和'format'的值是如何计算的,这个程序是在Visual Studio上编译的。谁能详细解释一下这个值是如何计算的?在跑步时,我得到,p = 2,格式 = 9
提前致谢
char *p
是指向内存中字符的指针。 char str[20]
是一个足以容纳 20 个字符的数组。 str[0]
是指向数组中第一个元素的指针 str
。p = str
行将字符指针设置为p
指向数组str
的开头。
strlen
返回字符串中的字符数,因此lstr = strlen(str)
lstr
设置为 str
数组中的字符数。
添加或减去指针时,将根据类型移动指针。请参阅以下示例。
char *p, str[20];
p = str; //p now points to the beginning of str (a.k.a str[0])
p++; // We shifted p over by one character
// now (*p) == str[1]
p += 3; // We shifted p over 3 more characters
// now (*p) == str[1+3]
回到您的示例,p = str + lstr - 1
将 p 设置为指向 str
的底加上 str
中的字符数(即 20(减去 1。减号很重要,因为如果我们要做str + lstr
并访问str[20]
,我们将超出界限。
实质上,p
被设置为指向str
数组中的最后一个字符。
基本上,你有所谓的运算符。您还可以编写自己的运算符。网上有很多资源,您可以在其中详细检查某些操作员如何详细工作。这可能会帮助你并回答所有问题:http://en.cppreference.com/w/cpp/language/operator_arithmetic
相关文章:
- 防止主数据类型C++的隐式转换
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在C++中打印指向不同基元数据类型的指针的内存地址
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 如何计算数据类型的范围,例如int
- C++中数据类型修饰符的顺序
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- 算术运算的结果类似于:C浮点变量中的1/3
- 特定数据类型的模板类
- 具有多个模板的模板函数,用于特定数据类型(如字符串)?
- 如何确定涉及 C++ 中除法的算术表达式的数据类型
- C++中混合数据类型的算术运算
- C++:“enable_if”用于限制支持特定算术运算的类型
- 将临时值存储为某种数据类型时,算术运算的标准规则是什么
- (C++,提升::变体)提升变体映射的数据类型并对其执行数学运算
- C++ 类型强制转换算术运算
- 返回类型取决于算术运算的顺序.对吗?
- 为什么在C和c++中进行算术运算之前必须将short类型转换为int类型?
- 我怎么知道是什么使不完整类型不完整的错误:对指向不完整类型的指针进行算术运算
- opencv Mat数据类型转换和算术