我想了解算术操作如何在不同的数据类型上发生,
#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;
}
基本上这个程序没有特定的功能,我只是想了解&#39; p&#39;的价值。和&#39;格式&#39;计算,这个程序是在Visual Studio上编译的。 任何人都可以解释我如何计算详细信息的价值? 在跑步我得到, p = 2,格式= 9
提前致谢
答案 0 :(得分:1)
基本上,你有所谓的运营商。您也可以编写自己的运算符。网上有很多资源,您可以详细查看某些操作员的工作原理。这可能会帮助您回答所有事情:http://en.cppreference.com/w/cpp/language/operator_arithmetic
答案 1 :(得分:1)
char *p
是指向内存中char的指针。 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的字符数。减1是重要的是因为如果我们要str + lstr
并访问str[20]
,我们就会超出界限。
基本上p
被设置为指向str
数组中的最后一个字符。