首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2013-04-09 
帮忙解释一下这个指针问题。1 #include iostream2 using namespace std3 int main()4 {5char *str[] {

帮忙解释一下这个指针问题。
  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 是指向第二个元素,不是到数组外面了

热点排行