C++中混合数据类型的算术运算

Arithmetic operation on mixed data type in C++

本文关键字:算术运算 数据类型 混合 C++      更新时间:2023-10-16

我想了解算术运算在不同数据类型上是如何发生的,

#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] 是指向数组中第一个元素的指针 strp = 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