一道关于指针数组的面试题
Posted 章无忌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一道关于指针数组的面试题相关的知识,希望对你有一定的参考价值。
- #include <iostream>
- using namespace std;
- int main ( )
- {
- char *str[]={"welcome","to","fortemedia","Nanjing"};
- char * * p=str+1; //p指向 "to"字符串地址
- str[0]=(*p++) +2; //str[0]指向‘\0‘; 然后p后移 p=str[2]
- str[1]=*(p+1); //p+1后 p+1 = str[3]; 然后 str[1] = str[3]
- str[2]=p[1]+3; //str[2]指向str[3]的从0开始数的第三个 str[2]指向"jing"地址
- str[3]=p[0]+(str[2]-str[1]); //str[3]指向从p[0]开始(也就是*p,也就是str[2])的 偏移量为(str[2]-str[1])的地址~ str[2]指向"jing",str[1]指向str[3],也就是"Namjing",所以str[3]指向"jing"的"g"地址
- printf("%s\n",str[0]);
- printf("%s\n",str[1]);
- printf("%s\n",str[2]);
- printf("%s\n",str[3]);
- return 0;
- }
- int main()
- {
- char *str[] = {"Welcome","to","Fortemedia","Nanjing"};
- char **p = str + 1;
- str[0] = *p++;
- //{"to","to","Fortemedia","Nanjing"};
- str[1] = *(p+1);
- //{"to","Nanjing","Fortemedia","Nanjing"};
- str[2] = p[1] + 3;
- //{"to","Nanjing","jing","Nanjing"};
- str[3] = p[0] + (str[2] - str[1]);
- //str[2]-str[1]是原来的指向Nanjing中的j的指针减去Nanjing中的N的指针,当然是3了
- //p[0] 是指向"jing"中的j的,再加3就是g了
- printf("%s\n",str[0]);
- printf("%s\n",str[1]);
- printf("%s\n",str[2]);
- printf("%s\n",str[3]);
- return 0;
- }
以上是关于一道关于指针数组的面试题的主要内容,如果未能解决你的问题,请参考以下文章
数组和指针关于「sizeof」 「strlen 」经典易错面试题