首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 问个指针问题
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-23 22:06:54 楼主
    指向数组的指针,比如:
        int *p,m[20];
        p=m;
    指针p的值是m[0]的值,
    p+1是不是代表m[1]的值?

    那如果一般的指针,不是指向数组的,p+1是什么意思?是不是等于p中的值加1呢?
    比如说:

            int *p,m;
            p=m;
          那p+1是不是等于m的地址加1?

       
                     
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-23 22:23:291楼 得分:0
    第一问:p的值是&m[0],即m
    就是数组的首地址
    p+1的值是&m[1],是m[1]的地址

    第二问:p=m 无法通过编译,类型不相同
    应写为p=&m
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dizuo
    • 等级:
    发表于:2008-02-23 23:24:322楼 得分:0
    C/C++ code
    那p+1是不是等于m的地址加1? -------------------- p+1是地址增加,但不一定是加1,与类型有关,int加4,double加8...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-23 23:38:423楼 得分:0
    第一个问题楼主的想法是对的,第二个编译器就同步过去,改为p=&m;p+1;的地址就可m是什么数据类型了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Mnky
    • 等级:
    发表于:2008-02-24 11:29:114楼 得分:0
    p是地址,那么p+1就是下一个地址。
    当m是数组时,p=m让p为m[0]的地址,那么p+1就是m[0]下一个地址,自然就是m[1];
    当m为变量时,p=&m,p为m的地址,所以p+1是m的下一个地址。但m的下一个地址是什么呢?不一定,未知,所以这样一般是没有意义的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-24 11:31:245楼 得分:0
    地址。。。。数据。。。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-24 14:50:576楼 得分:0
    第二问中p=m是我写错了哈~~手误手误,应该是p=&m,呵呵

        比如说m为int,且m地址为1000,那p+1的值应该等于1001,还是1002呢??
          如果m为float,地址为1000,那p+1的值应该等于1004?是这样吗?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-24 15:11:187楼 得分:0
    按lz的想法:(在dev-c++ 4.9.9.2下C代码)
    C/C++ code
    #include <stdio.h> int main(void){ int m=1000,*p; p=&m; printf("p:\t%d\np+1:\t%d\np+2:\t%d",p,p+1,p+2); printf("\nsizeof(int):%d",sizeof(int)); return 0; } 结果: p: 2293572 p+1: 2293576 p+2: 2293580 sizeof(int):4
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-24 15:30:048楼 得分:0
    比如说m为int,且m地址为1000,那p+1的值应该等于1001,还是1002呢??
    如果m为float,地址为1000,那p+1的值应该等于1004?是这样吗?
    -------------------------------------------------------------
    不同的编译器int占的空间不一样,vc++是四个字节
    TC是两个字节
    如果是两个字节,那么p+1为1002
    如果是四个字节,那么p+1为1004

    float一般占四个字节,所以p+1值为1004
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Mnky
    • 等级:
    发表于:2008-02-24 15:46:009楼 得分:0
    回6楼,p+1到底是加多少,不是看m的类型,而是看p的类型。
    如果p是int型的指针,在32位机上,p+1就是加了4,在vc+下,float也是4字节。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-24 16:18:4210楼 得分:0
    int *p, m[10];
    p = m;
    由于数组名就是数组首元素的地址,所以m就是&m[0],p = m也就是 p = &m[0],p + 1就是把指针p移动到下一个对象的位置上,加1指针移动一个对象大小的内存,而不是单纯的增大1.

    指针的加减只针对指针指向相同的数组时,否则指针和整数相加,相减,指针与指针相减都是无定义的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-24 18:17:5511楼 得分:0
    那如果一般的指针,不是指向数组的,p+1是什么意思?是不是等于p中的值加1呢?
    比如说:

                      int  *p,m;
                    p=m;
                那p+1是不是等于m的地址加1?

    这种赋值应该是不正确的,一个是地址,一个是整数.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-25 12:12:3512楼 得分:0
    懂了,谢谢大家了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-25 12:54:1913楼 得分:0
    指针本身位于栈中
    指针加1,相当于指向下一个栈地址
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved