代码解释 C++ [结构 / 两个 diamentinal 数组 / 指针]

code explanation c++ [struct / two diamentinal array / pointers]

本文关键字:diamentinal 数组 指针 两个 代码 C++ 结构 解释      更新时间:2023-10-16

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

void accumulation(void)
{
  char * test[] ={"Rehan ","Kalpana"};
  chartest(&test[0][1]);
}
void chartest( char * nam)
{
    printf("char name -> %s n",nam);
}

我更改了图表中的值,如下所示,然后我得到了如下输出

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

谁能解释为什么会这样。 这对我有很大帮助。 谢谢

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

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*

您只是偏移字符串的开头。

希望我说得有道理。

当你打电话时

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

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

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

现在,chartest()打印通过的结果char *

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