使用字符作为数组下标[英] using character as array subscript

问题描述

你好,

使用 char 对数组进行索引的最佳语法是什么.

////////////////////////////////////
例如

整数数据[256];

数据[''a''] = 1;
数据[''b''] = 1;
////////////////////////////////////////

gcc 抱怨这种语法,所以我在
上使用静态转换字符文字.有没有更好的办法呢?

谢谢,
Ivan

推荐答案

"Ivan"<iv**@novickmail.com 在留言中写道
新闻:e1**********************************@i18g2000 prn.googlegroups.com...
你好,

使用 char 索引数组的最佳语法是什么.

////////////////////////////////////
例如

整数数据[256];

数据[''a''] = 1;
数据[''b''] = 1;
//////////////////////////////////////

gcc 抱怨这种语法,所以我在
上使用静态转换字符文字.有一个更好的方法吗?
MSVC++ 2008 express 没有抱怨,并且可以很好地编译代码,甚至没有
一个警告.只要你的原生类型是明确定义的行为
char 是无符号的 8 位字节.

如果我在我的系统上
std::cout <<typeid(''a'').name() <"\n";
我得到
的输出字符

不是无符号字符.如果您
可能会为您产生一些未定义的行为尝试使用大于 127 的字符作为一个字节,他们
可能会出现负面影响.

Jim Langston 写道:
"伊万"<iv**@novickmail.com 在留言中写道
新闻:e1**********************************@i18g2000 prn.googlegroups.com...
>嗨,

使用 char 来索引数组的最佳语法是什么.

////////////////////////////////
例如

int data[256];

data[''a''] = 1;
数据[''b''] = 1;
///////////////////////////////

gcc 抱怨这种语法,所以我在
字符文字上使用静态转换.有一个更好的方法吗?

MSVC++ 2008 express 没有抱怨,并且可以很好地编译代码,甚至没有
一个警告.只要你的原生类型是明确定义的行为
char 是无符号的 8 位字节.

如果我在我的系统上
std::cout <<typeid(''a'').name() <"\n";
我得到
的输出字符

不是无符号字符.如果您
可能会为您产生一些未定义的行为尝试使用大于 127 的字符作为一个字节,他们
可能会显示为负数.

定义好了吗?我认为这取决于字符编码
使用,例如 ASCII 与 EBCDIC.还是标准真的规定了
现在字符编码?

--
Daniel Pitts 的技术博客:<http://virtualinfinity.net/wordpress/>

2008 年 6 月 16 日星期一 18:53:05 -0700,丹尼尔·皮茨
<ne******************@virtualinfinity.net 在 comp.lang.c++ 中写道:
吉姆兰斯顿写道:
"伊万"<iv**@novickmail.com 在留言中写道
新闻:e1**********************************@i18g2000 prn.googlegroups.com...
你好,

使用 char 索引数组的最佳语法是什么.

////////////////////////////////////
例如

整数数据[256];

数据[''a''] = 1;
数据[''b''] = 1;
//////////////////////////////////////

gcc 抱怨这种语法,所以我在
上使用静态转换字符文字.有一个更好的方法吗?
MSVC++ 2008 express 没有抱怨,并且可以很好地编译代码,甚至没有
一个警告.只要你的原生类型是明确定义的行为
char 是无符号的 8 位字节.

如果我在我的系统上
std::cout <<typeid(''a'').name() <"\n";
我得到
的输出字符

不是无符号字符.如果您
可能会为您产生一些未定义的行为尝试使用大于 127 的字符作为一个字节,他们
可能会显示为负数.
定义好了吗?我认为这取决于字符编码
使用,例如 ASCII 与 EBCDIC.还是标准真的规定了
现在字符编码?
不,标准没有指定执行字符集.或来源
字符集,就此而言.这就是为什么它更
可移植使用实际字符,而不是它们的数字
特定字符集中的值.

事实上,OP 的代码很可能是初学者作业的一部分
在某些输入数据中生成字符的直方图.

这保证为
生成正确的十六进制数字字符无论字符集如何,无符号整数的最低半字节:

char hex[] = "0123456789ABCDEF";

char hex_digit(unsigned int x)
{
返回十六进制 [x &0xf];
}

....如果您将数组的定义更改为:

字符十六进制 [17] = { 48, 48,/*... */69, 70, 0 };

....然后你得到完全相同的数组和结果在 ASCII
实现,以及任何其他执行字符集的乱码.

--
杰克·克莱恩
主页:http://JK-Technology.Com
常见问题解答
comp.lang.c http://c-faq.com/
comp.lang.c++ http://www.parashift.com/c++-常见问题解答/
alt.comp.lang.learn.c-c++
http://www.club.cc.cmu.edu/~ajo/docs/FAQ-acllc.html

本文地址:https://www.itbaoku.cn/post/1050842.html