| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 527 人关注过本帖
标题:[求助]简单又困惑的问题?
只看楼主 加入收藏
wolf_elite
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2006-6-26
收藏
 问题点数:0 回复次数:9 
[求助]简单又困惑的问题?

一个指针数组char *p[3] 分别指向多字符串char str[3][20]
现在的问题是:
*p[1]是否等于*(p+1)

搜索更多相关主题的帖子: 困惑 
2006-08-14 18:16
触电
Rank: 1
等 级:新手上路
威 望:1
帖 子:228
专家分:0
注 册:2006-7-26
收藏
得分:0 
p[1]是指针数组的第一个指针,它指向的是第一个字符串的首址
所以*p[1]是第一个字符串的第一个字符
*(p+1)=同
2006-08-14 18:36
wolf_elite
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2006-6-26
收藏
得分:0 
我也这么想
你看
#include"stdio.h"
#include"string.h"
main()
{
char *a[3],cc[3][20];
int i;
char *p;
for(i=0;i<3;i++)
a[i]=cc[i];
for(i=0;i<3;i++)
scanf("%s",a[i]);
if(strcmp(*a,*(a+1))>0)
{p=*a;*a=*(a+1);*(a+1)=p;}
if(strcmp(*a,*(a+2))>0)
{p=*a;*a=*(a+2);*(a+2)=p;}
if(strcmp(*a,*(a+2))>0)
{p=*(a+1);*(a+1)=*(a+2);*(a+2)=p;}
for(i=0;i<3;i++)
printf("%s\n",a[i]);}


我把*(a+i)全代为*a[i]后有好几个warning
虽然能complie,但是不能运行
我不明白为什么会这样


2006-08-14 18:43
触电
Rank: 1
等 级:新手上路
威 望:1
帖 子:228
专家分:0
注 册:2006-7-26
收藏
得分:0 
我在VC下编译运行的,没有问题
2006-08-14 19:25
触电
Rank: 1
等 级:新手上路
威 望:1
帖 子:228
专家分:0
注 册:2006-7-26
收藏
得分:0 
以下是引用wolf_elite在2006-8-14 18:43:33的发言:
我也这么想
你看
#include"stdio.h"
#include"string.h"
main()
{
char *a[3],cc[3][20];
int i;
char *p;
for(i=0;i<3;i++)
a[i]=cc[i];
for(i=0;i<3;i++)
scanf("%s",a[i]);
if(strcmp(*a,*(a+1))>0)
{p=*a;*a=*(a+1);*(a+1)=p;}
if(strcmp(*a,*(a+2))>0)
{p=*a;*a=*(a+2);*(a+2)=p;}
if(strcmp(*a,*(a+2))>0)//*a应该改为*(a+1) 吧
{p=*(a+1);*(a+1)=*(a+2);*(a+2)=p;}
for(i=0;i<3;i++)
printf("%s\n",a[i]);}


我把*(a+i)全代为*a[i]后有好几个warning
虽然能complie,但是不能运行
我不明白为什么会这样

2006-08-14 19:30
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
不等,完全不同,差了一级。
P[1]可以理解为:*(P+1);
跟*P[1]刚好差了一级指针。

对不礼貌的女生收钱......
2006-08-14 19:32
shuaiye
Rank: 1
等 级:新手上路
帖 子:445
专家分:0
注 册:2006-5-15
收藏
得分:0 

[QUOTE]*p[1]是否等于*(p+1)[/QUOTE]

不同,它们的地址不同。

p[1]表示数组P中第2个元素。p[1]的值为指向的地址值,因为是指针数组,它指向的是str[1]的地址,故p[1]==str[1];

例:设p的地址在机器中为0x12345,则p[1]可为指向任何char变量或char数组的地址值,因为p[1]表示的是数组中的元素。

(p+1)则表示以数组P的地址为基地址向后漂移1一个字节。

例:设p的地址在机器中为0x12345,则(p+1)为0x12346


由于工作,N久都没来了!
2006-08-14 19:34
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
引用
(p+1)则表示以数组P的地址为基地址向后漂移1一个字节。
楼上自己试一下这个
int a[3];
int *p=a;
printf("%x,%x",a,p+1);

对不礼貌的女生收钱......
2006-08-14 19:40
触电
Rank: 1
等 级:新手上路
威 望:1
帖 子:228
专家分:0
注 册:2006-7-26
收藏
得分:0 
大意了,对不起,楼主
2006-08-14 19:41
wolf_elite
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2006-6-26
收藏
得分:0 
以下是引用soft_wind在2006-8-14 19:40:15的发言:
引用
(p+1)则表示以数组P的地址为基地址向后漂移1一个字节。
楼上自己试一下这个
int a[3];
int *p=a;
printf("%x,%x",a,p+1);

.我不认为是向后漂移一个字节,而是增加它指向的对象长度


2006-08-14 21:10
快速回复:[求助]简单又困惑的问题?
数据加载中...
 
   



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

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