读书人

帮忙解释一下这个指针有关问题

发布时间: 2013-04-09 16:45:09 作者: rapoo

帮忙解释一下这个指针问题。
1 #include <iostream>
2 using namespace std;
3 int main()
4 {
5 char *str[] = {"welcome","to","fortemedia","nanjing"};
6 char **p = str + 1;
7 str[0] = (*p++) + 2;
8 printf("%s\n",str[0]);
9 return 0;
10 }
谁能帮我解释一下为什么str[0]指向了“nanjing”后面的元素?

[解决办法]
char **p = str + 1; // str数组名表示数组首地址,所以+1后,p指向了字符常量的"to"的't'的地址上;
str[0] = (*p++) +2 ; // *p指向字符't' +2后超出"to"的范围,是个空字符,如果此时是+1,则str[0]打印出来是个 o
[解决办法]
char **p = str + 1;
str[0] = (*p++) + 2;
p 一开始 +1
后来 +2
一共 +3

str+3 就是第四个元素
数组第四个元素 char* 指针指向 "nanjing"
[解决办法]

引用:
char **p = str + 1; // str数组名表示数组首地址,所以+1后,p指向了字符常量的"to"的't'的地址上;
str[0] = (*p++) +2 ; // *p指向字符't' +2后超出"to"的范围,是个空字符,如果此时是+1,则str[0]打印出来是个 o

++
[解决办法]
引用:
引用:引用:
char **p = str + 1; // str数组名表示数组首地址,所以+1后,p指向了字符常量的"to"的't'的地址上;
str[0] = (*p++) +2 ; // *p指向字符't' +2后超出"to"的范围,是个空字符,如果此时是+1,则str[0]……


引用:
引用:引用:
char **p = str + 1; // str数组名表示数组首地址,所以+1后,p指向了字符常量的"to"的't'的地址上;
str[0] = (*p++) +2 ; // *p指向字符't' +2后超出"to"的范围,是个空字符,如果此时是+1,则str[0]……
嗯 是的 的确是我弄错了 汗 误导人了 真该死
[解决办法]
引用:
引用:char **p = str + 1; // str数组名表示数组首地址,所以+1后,p指向了字符常量的"to"的't'的地址上;
str[0] = (*p++) +2 ; // *p指向字符't' +2后超出"to"的范围,是个空字符,如果此时是+1,则str[0]打印出来是个 o
你弄错了 这里 没有超出范围……


char *p[] <=/=> char (*p)[];

str+1 是指向第二个元素,不是到数组外面了

读书人网 >C++

热点推荐