我想了解算术运算在不同数据类型上是如何发生的,
#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