| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1722 人关注过本帖
标题:奇怪,为什么都是指针,差别这么大?
只看楼主 加入收藏
zky434404896
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2016-4-27
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:8 
奇怪,为什么都是指针,差别这么大?
图片附件: 游客没有浏览图片的权限,请 登录注册

为什么我定义的两个指针,一个有地址,一个地址是0??
2016-04-27 21:15
zky434404896
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2016-4-27
收藏
得分:0 
char *mystrncpy(char *p1, char *p2, int n)
{
    char *p=p1;//定义一个新的指针,
    while(*p1++ != '\0') continue;//这是让p1变成空的吗?
    *--p1 = *p2;//开始让p2传给p1
    n--;
    while(n>0 && *p2 != '\0')
    {
        *++p1 = *++p2;//通过循环的传给p1,但指针可以赋值吗?我记得好像不行来这,有时候行,有时候又不行,奇怪?
        n--;
    }
   
    return p;//返回p是因为之前被赋值p1,指向的p原来的地址,所以可以输出。我说的是不是对的??
}

我的思路有错吗?
求大神指出我的错误,还有帮忙回答下我的提问,关于 *++p1 = *++p2;
2016-04-27 21:37
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:5 
程序代码:
#include<stdio.h>

char *mystrncpy1(char *p1, char *p2, int n)
{
    int i;
    for(i=0; i<n; i++) *(p1+i)=*(p2+i);
    *(p1+i) = '\0';
    return p1;
}

char *mystrncpy2(char *p1, char *p2, int n)
{
    char *pp1, *pp2;
    pp1 = p1;
    pp2 = p2;
    int i;
    for(i=0; i<n; i++,pp1++,pp2++) *pp1=*pp2;
    *pp1 = '\0';
    return p1;
}

main()
{
    char p1[256], p2[]={"ABCD"};
    puts(mystrncpy1(p1, p2, 4));
    puts(mystrncpy2(p1, p2, 3));
}
2016-04-27 22:17
zky434404896
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2016-4-27
收藏
得分:0 
回复 3楼 吹水佬
大神,问个问题;
为什么有时候我看到*p1=*p2
但有时候又有p1=p2
两种情况都是指针,但我没搞懂这俩个的区别是什么?
2016-04-28 09:28
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
回复 4楼 zky434404896
p1 是你家的门牌号码
*p1 是你家里的东西
2016-04-28 10:01
zky434404896
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2016-4-27
收藏
得分:0 
回复 5楼 吹水佬
额,我知道指针的定义。但是有时候我看到程序*p1=*p2;
但有时候又不能这么写??只能写P1=P2;这两种表达有什么区别呢?
或者说,什么时候写第一种,什么时候写第二种?
2016-04-28 12:39
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:5 
回复 6楼 zky434404896
看你是要地址还是值了。
2016-04-28 14:43
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:5 
*是取值运算符
p1,p2这个变量本身的值是一个地址,//--》钥匙
*p1的意思是访问p1所指向的地址,取出存放在这个地址上的值。//-->开门
*p1=*p2的意思是把存放在p2地址上的值赋值到p1位置上;//-->把p2钥匙能开的门里的东西赋值到p1钥匙能开的门里去
p1=p2,把p2指向的地址复制给P1。//p1钥匙重做成p2的模样,他就能开p2的门了,至于p1钥匙原先能开的门,,,门海在那里,但没钥匙了(除非你在别处有备用的。)


φ(゜▽゜*)♪
2016-04-28 19:37
未来大仙
Rank: 6Rank: 6
来 自:黑窟窿
等 级:侠之大者
威 望:4
帖 子:263
专家分:491
注 册:2015-6-20
收藏
得分:5 
*是取值运算符,就是 对指针内部的值进行修改,这个名字很形象了吧?取值运算!! 其实指针本身存放的是地址, 只是这个地址存着一个值, 可以这么理解吧, int *p  就是买了一座房子,p=&a  就是给房子找一个地址,然后*p  就取出房子里面的东西,所以指针就是 先买房子 int *p  然后找位置, p=&a,然后放家私 *p=1;
就这么一个过程

好好学习,天天向上!
2016-04-28 23:33
快速回复:奇怪,为什么都是指针,差别这么大?
数据加载中...
 
   



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

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