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

时间:2018-03-14 05:47:09

标签: 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;
}

基本上这个程序没有特定的功能,我只是想了解&#39; p&#39;的价值。和&#39;格式&#39;计算,这个程序是在Visual Studio上编译的。 任何人都可以解释我如何计算详细信息的价值? 在跑步我得到, p = 2,格式= 9

提前致谢

2 个答案:

答案 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数组中的最后一个字符。

相关问题