标题:奇怪,为什么都是指针,差别这么大?
只看楼主
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: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册: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: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册: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



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-464197-1-1.html




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

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