c++中typeid里的PKc是什么意思?它是个什么类型?

今天写了一段c++代码,功能是通过命令行传参计算2个参数的和,

在进行参数类型转换的时候,报下以错误:

025.cpp:9:14: error: cast from pointer to smaller type 'int' loses information

      sum += (int)argv[i]

刚开始我没想去查在c++中进行字符类型转换的方法,而是想判断一下argv[1]是什么类型。

于是加了下面一行代码:

    for (int i=1; i<3; ++i){
      //cout << argv[i]<<endl;
      cout << typeid(argv[i]).name() <<endl;
    }

输出的结果是:PKc

typeid(argv)的结果是PPKc

注:要想使用typeid,必须加上#include <typeinfo>

这是什么东西?于是开始百度,但没搜到,在知乎上看到这样的解释:

名字是编译器规定的。具体到这个上面你可以记成pointer(P) const(K) char(c)

原来main函数传递的argv的类型是 const char *, 是一个字符指针常量.

对了,知科那哥们说是编译器规定,我是在mac下运行的程序,gcc的版本是4.2.1,还没在windows下测试过。

上面代码中对argv的类型转换也是错误的。

正确的程序如下:

#include <iostream>
#include <typeinfo>
using namespace std;


int main(int argc, const char *argv[]){
  int sum = 0;
    cout<<typeid(argv).name()<<endl;
  if(argc>2){
    for (int i=1; i<3; ++i){
        int item = stoi(argv[i]);
        sum += item;
    }
  }
  //cout << argc <<endl;
  cout << sum <<endl;
  return 0;
}

 

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值