| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1013 人关注过本帖, 1 人收藏
标题:求助 :指针数组 和数组指针 的问题
只看楼主 加入收藏
sun004715
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2010-10-30
结帖率:100%
收藏(1)
已结贴  问题点数:10 回复次数:13 
求助 :指针数组 和数组指针 的问题
1    #include <stdio.h>
2
3    int main(void)
4    {
5      char *str[] = {"Welcome", "to", "Fortemedia", "Nanjing"};
6      char **p = str + 1;
7      str[0] = (*p++) + 2;
8      str[1] = *(p+1);
9      str[2] = p[1] + 3;
10     str[3] = p[0] + (str[2] - str[1]);
11     printf("%s\n", str[0]);
12     printf("%s\n", str[1]);
13     printf("%s\n", str[2]);
14     printf("%s\n", str[3]);
15     return 0;
16    }


运行结果:
(空)
Nanjing
jing
g


令:
第 1 个字符串的首地址的存放地址,标记为    A,  其内容为“Welcome”.
第 2 个字符串的首地址的存放地址,标记为    B,  其内容为“to”.
第 3 个字符串的首地址的存放地址,标记为    C,  其内容为“Fortemedia”.
第 4 个字符串的首地址的存放地址,标记为    D,  其内容为“Nanjing”.

请帮忙解释下 为什么str[0]为空,  str[3]为 g
代码 第6行结束时,p指向B
代码 第7行是 str[0]指向 哪儿呢?

代码 第10行的p[0]不是指向C吗?
搜索更多相关主题的帖子: 指针 
2010-12-09 17:52
xzy199999
Rank: 4
等 级:业余侠客
帖 子:326
专家分:286
注 册:2010-11-19
收藏
得分:0 
int main()
{
    char *str[] = {"Welcome", "to", "Fortemedia", "Nanjing"};
    char **p = str;
    printf("%s\n", *p);
    printf("%s\n", *++p);
    printf("%s\n", *++p);
    printf("%s\n", *++p);
   
   
    getch();
    return 0;
   
}
这是我改的程序,可以符合你的要求

我是初学者
2010-12-09 18:13
xzy199999
Rank: 4
等 级:业余侠客
帖 子:326
专家分:286
注 册:2010-11-19
收藏
得分:2 
#include <stdio.h>
void main()
{


char *str[]={"Welcome","to","Fortemedia","Nanjing"}; //开始时str是下面数组的第一个值:
//{第一个字符串的首地址的存放地址,第二个字符串的首地址的存放地址,第三个字符串的首地址的存放地址,第四个字符串的首地址的存放地址}



char **p = str + 1;//p是下面数组的第一个值:
//{第二个字符串的首地址的存放地址,第三个字符串的首地址的存放地址,第四个字符串的首地址的存放地址}


str[0] = (*p++) + 2; //str1[0]被改变了
//此后*p被改变了       其值为第三个字符串的首地址


str[1] = *(p+1);//str[1]被改变了 其值为第四个字符串的首地址
//此时p的值还是第三个字符串的首地址的存放地址 即*p(或者说p[0])对应str[2]

str[2] = p[1] + 3; //p[1]:在元素是字符串三(p是其首地址)的基础之上+1的 即等价于*(p+1)
//此后str[2]等于字符串四中j的地址       也就是p所保存的地址

str[3] = p[0] + (str[2] - str[1]);//由上一语句str+2, str[2]与p的关系可得

printf("0%s1%s2%s3%s\n",str[0],str[1],str[2],str[3]);

}
 


我是初学者
2010-12-09 18:33
sun004715
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2010-10-30
收藏
得分:0 
回复 3楼 xzy199999
不好意思  可能我没说清楚 你没明白我的意思  上面程序是对的  不需要改  我是 想弄清楚 str[0] 为什么 为 空,  str[4] 为什么 为 j   想知道 详细的分析过程
2010-12-09 18:40
丶倾城
Rank: 2
等 级:论坛游民
帖 子:11
专家分:23
注 册:2010-12-8
收藏
得分:3 
7      str[0] = (*p++) + 2;
*p当前指向是str第二个元素   即“to”;

- -*p + 2自然为空
2010-12-09 19:24
sun004715
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2010-10-30
收藏
得分:0 
str[3]  怎么 为 g?
2010-12-09 20:40
Kid_X
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:216
专家分:515
注 册:2007-10-8
收藏
得分:5 
p[0]指向Nanjing中的j
str[2]指向Nanjing中的j
str[1]指向Nanjing中的N
所以p[0]+(str[2]-str[1])指向Nanjing中的g
2010-12-09 21:00
gaochizhen33
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:114
专家分:101
注 册:2010-11-4
收藏
得分:0 
p[0]为什么指向了j了呢第十步中
2010-12-09 21:30
Kid_X
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:216
专家分:515
注 册:2007-10-8
收藏
得分:0 
p初始化时指向str[1],后来又进行p++,所以p指向str[2],p[0]的值等于str[2]的值
2010-12-09 22:14
gaochizhen33
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:114
专家分:101
注 册:2010-11-4
收藏
得分:0 
str[2] = p[1] + 3;这步之前的我还能理解 可是后边你不是说p[0]指向Nanjing中的j,这是为什么呢


2010-12-09 22:22
快速回复:求助 :指针数组 和数组指针 的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024321 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved