代码解释c ++ [struct / two diamentinal array / pointers]

时间:2015-03-14 03:15:57

标签: c++ arrays pointers

我是c ++及其开发人员的新手。我有两种方法void accumulation(void)&在我的main.cpp文件中调用void chartest(char * nam)accum。

void accumulation(void)
{
  char * test[] ={"Rehan ","Kalpana"};
  chartest(&test[0][1]);
}

void chartest( char * nam)
{
    printf("char name -> %s \n",nam);
}

我按照以下方式更改了chartist中的值,然后输出如下

chartist(&test[0][1] - char name -> ehan
chartest(&test[1][1])-char name -> alpana
chartest(&test[1][0]) -char name -> Kalpana
chartest(&test[0][0])- char name -> Rehan

任何人都可以解释为什么会发生这种情况。它会帮助我很多。谢谢

2 个答案:

答案 0 :(得分:1)

您基本上只是访问字符串中的某个字符并将其转换为字符数组(检索它的地址)。

test[0][0] = "Rehan" = 'R'   // type: char
              ^
test[0][1] = "Rehan" = 'e'   // type: char
               ^

&test[0][0] = "Rehan"        // type: char*
&test[0][1] = "ehan"         // type: char*

你刚刚抵消了字符串的开头。

希望我有道理。

答案 1 :(得分:0)

致电时

chartest(&test[0][1]);

您正在test[0][1]传递字符的地址,即

Memory : 900 901 902 903 904 905 906 907
          R   E   H   A   N       \0
              ^ <-This address is being sent to the chartest() function.

现在chartest()打印生成的char *已通过。

printf() %s打印字符串,直到遇到\0为止, 在第一种情况下,chartest()将打印EHAN