我是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
任何人都可以解释为什么会发生这种情况。它会帮助我很多。谢谢
答案 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
。