为什么sizeof()在输入为(char)和' A'时返回不同的值。

时间:2018-04-10 12:31:56

标签: c character sizeof

我正在处理public void getPdfFile() { pdf_link = this.getIntent().getExtras().getString("PDF_URL"); checkStrUrl = pdf_link.substring(pdf_link.lastIndexOf("_") + 1); if (!checkFileInDevice(checkStrUrl)) { new RetrievePDFStream().execute(pdf_link); } else { File file = new File(Environment.getExternalStorageDirectory().toString() + "/Application Documents/" + checkStrUrl); pdfView.fromFile(file).load(); } } class RetrievePDFStream extends AsyncTask<String, Void, InputStream> { @Override protected InputStream doInBackground(String... strings) { InputStream inputStream = null; try { URL url = new URL(strings[0]); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); if (urlConnection.getResponseCode() == 200) { inputStream = new BufferedInputStream(urlConnection.getInputStream()); } } catch (IOException e) { return null; } return inputStream; } @Override protected void onPostExecute(InputStream inputStream) { pdfView.fromStream(inputStream).load(); } }

当我输入参数为char数据类型

sizeof()

它将输出设为1。

但是当我进入这样的论点时

J=sizeof(char);

我输出为4。

由于它的参数是J=sizeof('A'); 数据类型,它应该返回1作为输出,为什么它返回4/2(取决于32位/ 64位设备)。

2 个答案:

答案 0 :(得分:6)

在C中,'A' char类型的常量,它是int类型。 (在C ++中它是char。)

C是这方面的一致性模型;比照C ++,其中'a' + 'b'int类型,是一个多字符常量,如'ab'

答案 1 :(得分:5)

看来你的意思是C。

在C字符文字中(在C字符常量中调用)具有类型int。因此sizeof( 'A' )相当于sizeof( int ),通常会产生4

从C标准(6.4.4.4字符常量)

  

10整数字符常量的类型为int。整数的值   包含映射到a的单个字符的字符常量   单字节执行字符是数值   解释为整数的映射字符的表示形式。该   包含多个的整数字符常量的值   字符(例如,&#39; ab&#39;),或包含字符或转义序列   不映射到单字节执行字符的是   实现定义。如果整数字符常量包含a   单个字符或转义序列,其值是产生的值   当一个char类型的对象,其值是单个的   字符或转义序列转换为int。

虽然sizeof( char )等于1。

来自C标准(6.5.3.4 sizeof和alignof运算符)

  

4当sizeof应用于类型为char,unsigned的操作数时   char,或signed char,(或其合格版本)的结果是   1 ....