2016-11-12 110 views
-4

我正在尝试创建一个数值数组,然后在获取数组值时对for循环中的元素进行计数。C++数组循环问题

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只是在使用耳机设置播放器时不起作用的hud本地人。

+1

请发送真实的编码。理想情况下,[MCVE]完全重现您的问题。 –

+0

我编辑了问题先生。 – BigJohn863

回答

0

sizeof运算符没有达到您期望它对原始指针变量所做的操作。它会给你指针变量的大小(4或8取决于你的CPU目标体系结构),但不是分配给后面的内存。

所以,当用函数调用等

void take_array(char* array) { 
} 

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

char array[42]; 

将衰减到的指针。

虽然

void take_array(char array[42]) { 
} 

将保持这一信息通过sizeof()被推断。

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) 

我想指望在一个阵列中的数据,并在循环中显示出来,所以我张贴这对任何人谁愿意做同样的,并不能找到答案。