C ++数组循环问题

时间:2016-11-12 17:59:10

标签: c++ arrays

我正在尝试创建一个数值数组,然后在获取数组值时计算for循环中的元素。

if (ShowTalkingPlayers)
{
    memset(TALKING, 0, sizeof(TALKING));
    char *Talker;

    for (int i = 0; i < PLAYER::GET_NUMBER_OF_PLAYERS(); i++)
    {
        if (NETWORK::NETWORK_PLAYER_HAS_HEADSET(i))
        {
            Talker = PLAYER::GET_PLAYER_NAME(i);
            if (NETWORK::NETWORK_IS_PLAYER_TALKING(i)) snprintf(TALKING, sizeof(TALKING), "Mic: ~g~%s", Talker);
            else snprintf(TALKING, sizeof(TALKING), "Mic: ~b~%s", Talker);

            Do_ShowTalkingPlayers(TALKING, i);
        }
    }
}

这是一个工作代码问题是......它在玩家名称之间创造了空间,因为它循环遍及所有18名玩家,而不仅仅是拥有耳机的玩家。我之前在考虑做一个for循环,所以我可以收集一个有阵列耳机的用户ID,然后遍历数组数据并显示说话的玩家。

DO_SHOWTALKINGPLAYERS只是简单的本地人,在使用耳机设置玩家方面没有任何作用。

2 个答案:

答案 0 :(得分:0)

sizeof运算符不会执行您对原始指针变量的预期操作。它将为您提供指针变量的大小(4或8,具体取决于您的CPU目标体系结构),但不会分配给后面分配的内存。

所以

 char array[42];
使用类似

的函数调用时,

会衰减为指针

 void take_array(char* array) {
 }

和sizeof将产生指针变量大小。

虽然

 void take_array(char array[42]) {
 }

会保留该信息,以便sizeof()推断出来。

答案 1 :(得分:0)

我可以使用此网站上某人发布的自定义Foreach循环来获得所需的结果。谢谢那些投票我的问题的人。

#define foreach(item, array) \
for(int keep = 1, \
        count = 0,\
        size = sizeof (array) / sizeof *(array); \
    keep && count != size; \
    keep = !keep, count++) \
  for(item = (array) + count; keep; keep = !keep)

我想要计算数组中的数据并将它们显示在一个循环中,所以我将这个发布给其他希望做同样但无法找到答案的人。