| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5240 人关注过本帖
标题:求一个指针的长度
只看楼主 加入收藏
simplelive
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2008-2-20
收藏
 问题点数:0 回复次数:22 
求一个指针的长度
main()
{char *p="abcde\Ofghjik\0";
 printf("%d\n",strlen(p));
}这个程序输出的结果是___.参考答案是12
结束标志'\0',此出是字母'O',还是数字'0'?此题在书上前面\后的字符与后面\后的字符是不同的.如果后面一个是结束字符,为什么答案不是13,'\'算不算字符.如果前面那个是结束字符,答案是不是应该是5.请分析一下.
搜索更多相关主题的帖子: 指针 字符 长度 数字 结束 
2008-03-15 22:36
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
#include"string.h"
#include"stdio.h"
main()
{
    char *p="abcde\Ofghjik\0";
    printf("%d\n",strlen(p));
    while(printf("%c",*p)&&*(p++)!='\0');
}

[[it] 本帖最后由 sunkaidong 于 2008-3-15 22:44 编辑 [/it]]

学习需要安静。。海盗要重新来过。。
2008-03-15 22:43
simplelive
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2008-2-20
收藏
得分:0 
求这个程序的运行结果
fun(char *w,int n)   /*我的理解:从下面主函数知道n=7*/
{char t,*s1,*s2;
s1=w;s2=w+n-1;   /*把字符串"1234567"的首地址赋给s1,把w+6赋予s2.*/
while(s1<s2){t=*s1++;*s1=*s2--;*s2=t;}/*s1与s2比较是不是比首地址处字符的ASCII码?t=*s1++是怎么执行的,是先将s1所指的内容赋予t,再s1指向下一个字符?还是先移向下一个字符,再把此字符赋予t呢?)*/
}
main(0
{char *p;
p="1234567";
fun(p,strlen(p));/*我的理解:strlen(p)=7*/
puts(p);
}答案1711717  请分析一下
2008-03-15 22:58
simplelive
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2008-2-20
收藏
得分:0 
(long*)p是什么意思
求程序输出结果
 main(0
{char *p="abcdefgh",*r;
 long *q;
 q=(long*)p; 不懂?是不是取p的内容强制定义?
q++;
r=(char*)q; 不懂?
printf("%s\n",r);
} 答案efgh 分析一下
2008-03-15 23:05
simplelive
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2008-2-20
收藏
得分:0 
(long*)p是什么意思
求程序输出结果
 main(0
{char *p="abcdefgh",*r;
 long *q;
 q=(long*)p; 不懂?是不是取p的内容强制定义?
q++;
r=(char*)q; 不懂?
printf("%s\n",r);
} 答案efgh 分析一下
2008-03-15 23:05
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
t=*s1++;*s1=*s2--;*s2=t这里有问题...你做完之后指针下移了..你的程序我没办法执行

学习需要安静。。海盗要重新来过。。
2008-03-15 23:16
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
#include"string.h"
#include"stdio.h"
void fun(char *w,int n)   
{
    char t,*s1,*s2;
    s1=w;
    s2=w+n-1;  
    while(s1<s2)
        {
         t=*s1;
         *s1=*s2;
        *s2=t;
        s1=s1+1;
        s2=s2-1;
        };
}
 void main()
{
     char p[]="1234567";
    fun(p,strlen(p));/*我的理解:strlen(p)=7*/
    puts(p);
}
不要用指针了..还是用数组吧...

学习需要安静。。海盗要重新来过。。
2008-03-15 23:17
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
(long*)p是什么意思
求程序输出结果
main(0
{char *p="abcdefgh",*r;
long *q;
q=(long*)p; //把它转化为long指针
q++;//以long的方式下移四个字节
r=(char*)q; //在转化回来
printf("%s\n",r);//字符串..到结尾结束
} 答案efgh 分析一下

学习需要安静。。海盗要重新来过。。
2008-03-15 23:22
hoodlum1980
Rank: 2
来 自:浙江大学
等 级:论坛游民
威 望:2
帖 子:289
专家分:23
注 册:2008-2-24
收藏
得分:0 
[bo]以下是引用 [un]simplelive[/un] 在 2008-3-15 22:36 的发言:[/bo]

main()
{char *p="abcde\Ofghjik\0";
 printf("%d\n",strlen(p));
}这个程序输出的结果是___.参考答案是12
结束标志'\0',此出是字母'O',还是数字'0'?此题在书上前面\后的字符与后面\后的字符是不同的.如果后面一个是 ...


我还是没有敢想当然,实际的运行了一下,发现输出结果是strlen(p)=5.也就是说\0中的\被当作转义的意思,因此这里的\0代表的是“null”,也就是值0。
2008-03-15 23:25
hoodlum1980
Rank: 2
来 自:浙江大学
等 级:论坛游民
威 望:2
帖 子:289
专家分:23
注 册:2008-2-24
收藏
得分:0 
[bo]以下是引用 [un]sunkaidong[/un] 在 2008-3-15 23:22 的发言:[/bo]

(long*)p是什么意思
求程序输出结果
main(0
{char *p="abcdefgh",*r;
long *q;
q=(long*)p; //把它转化为long指针
q++;//以long的方式下移四个字节
r=(char*)q; //在转化回来
printf("%s\n",r);//字符串..到结尾结束 ...

因为sizeof(long)=4,所以q++相当于q移动了4个字节,而sizeof(char)=1。因此指针移动到了第5个字符e的位置。所以打印出来的就是efgh了。如果你把上面的指针类型从long*改为int*,那么在16位下,int是2字节的,将会打印出来的就是“cdefgh”了。

[[it] 本帖最后由 hoodlum1980 于 2008-3-15 23:30 编辑 [/it]]
2008-03-15 23:28
快速回复:求一个指针的长度
数据加载中...
 
   



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

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