免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3206 | 回复: 16
打印 上一主题 下一主题

请高手指点迷津,指针问题. [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-04-14 15:31 |只看该作者 |倒序浏览
本帖最后由 huangzhenfan 于 2012-04-14 15:45 编辑

在C中:
#include <stdio.h>

int main (void)

{
    char n;
    char *p;
    p=&n;
    *p='B';
    *(p+1)='I';
    *(p+2)='L';
    *(p+3)='L';
    *(p+4)='G';
    *(p+5)='A';
    *(p+6)='T';
    *(p+7)='E';
    *(p+8 )=0;


    printf ("%s",p);

    return 0;
}

1.像这样的字符串赋值是否会破会其它的内存数据区域?
2.printf ("%s",p); 会是什么结果;
3.*(p+8 )=0;与*(p+8 )='\0' 是否相同;

请高手指点迷津

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
2 [报告]
发表于 2012-04-14 16:03 |只看该作者
1. 会
2. 因为“会”,所以就没意义了
3. 赋零应该用=0,赋字符串结束符应该用='\0'。虽然它们的值是相同的

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
3 [报告]
发表于 2012-04-14 16:25 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
4 [报告]
发表于 2012-04-14 16:35 |只看该作者
问楼上两位……
既然 0 与 '\0' 相同,何来赋零值应该用什么与赋字符串结束符应该用之分?

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
5 [报告]
发表于 2012-04-14 16:43 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
6 [报告]
发表于 2012-04-14 16:44 |只看该作者
数值常量0,与字符常量'\0' 占用字节区别为int 和 char
但p 是char 类型 所以都只取常量低8位字节嘛.
0与'\0' 区别是便于阅读?

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
7 [报告]
发表于 2012-04-14 16:50 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
8 [报告]
发表于 2012-04-14 17:09 |只看该作者
本帖最后由 huangzhenfan 于 2012-04-14 17:12 编辑

回复 7# pmerofc

我知道了,字符常量和数值常量默认均以int类型存储

论坛徽章:
0
9 [报告]
发表于 2012-04-14 17:37 |只看该作者
本帖最后由 huangzhenfan 于 2012-04-14 17:41 编辑

    ...

论坛徽章:
0
10 [报告]
发表于 2012-04-14 17:38 |只看该作者
回复 7# pmerofc


    在带形参的main 函数中: 命令行输入缓冲区中的字符串是如何传递给 char **s 的,字符串个数是如何传递给int n的
请高手指点:指向指针的指针变量,与指针数组,有哪些共同点,和区别?
我知道,指针数组名是地址常量,为每个指针元素各开辟4字节的内存空间;**s只有4字节的内存空间它可以存放一个指针变量本身的地址.

在C中:
#include <stdio.h>

int main(int n, char **s)
{
     int i=0;
     printf ("%d",n);

    while (i<n)
         printf ("%s\n",s[i++]);
     return 0;
}

如有命令行: main one two three
1.形参int n 是如何获得4;
2.而**s 的值又是什么? 使s[i++]能指向命行缓冲区中的各字符串.
3.这些缓冲区中的字符是怎么变成字符串的.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP