| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 375 人关注过本帖
标题:应用指针时候遇到几个问题;
只看楼主 加入收藏
sulang123
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2011-2-4
结帖率:42.86%
收藏
已结贴  问题点数:20 回复次数:5 
应用指针时候遇到几个问题;
第一个问题:
int main(int argc, char *argv[])
{
    int num[SIZE];
    int i;
    int *p;
    p=num;                      这样对数组进行赋值是没有问题的
    for (i=0;i<SIZE ;i++)
    {
        *(p+i)=i+1;            问题是我循环体改成*p=i+i; 赋值却出了问题???这是为什么呀
                                                                      p++;  
    }

   return 0;
}

第二个问题:做一个统计字符串长度的函数
#include <stdio.h>

int main(int argc, char *argv[])
{
    int calculation(char *p);
    char ch[5];
    char *p;
    p=ch;
    gets(ch);//输入字符串
    /*如果使用scanf()就是不能接受换行符*/
    printf("%d",calculationg(p));//打印出字符串长度

    return 0;
}
int calculation(char *p)//统计字符串长度的函数
{
    int i=0;
    while (*p!='\0')
    {
        p++;//输入的字符串长度超过了数组的大小,却依然可以得出正确的结果,这是怎么回事呀?
        i++;


    }
    return i;
}
第三个问题是:
#include <stdio.h>

int main(int argc, char *argv[])
{
    char *ch[2]={"ab","cd"};
    printf("%c",*ch[0]); \\代码到这里执行没有问题的
    *ch[0]='e';//到这里以后就出错了,我想知道为什么呀???   我测试的方法的把代码分开进行测试
    printf("%c",*ch[0]);
    return 0;
}
搜索更多相关主题的帖子: 字符串 return 统计 
2011-05-02 10:07
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:7 
1
 p++;  //这是错误的。因为for里*(p+i)已经起到移动指针的作用了。
*p=i+i;//这里的*p,表示的是第一元素,它与*(p+i)不同。

2
字符串以‘\0’作为结束标识。预留空间是5,估计跟编译器有关。

3
*ch[0]='e';//我这里不报错而且能显示‘e'。我用的是GCC编译。

[ 本帖最后由 ansic 于 2011-5-2 10:30 编辑 ]

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-05-02 10:27
loveshuang
Rank: 9Rank: 9Rank: 9
来 自:湖北武汉
等 级:蜘蛛侠
帖 子:270
专家分:1198
注 册:2010-11-14
收藏
得分:7 
第一个问题:p++之后指向了后面的位置,所以赋值完成之后就指向数组空间之外了,输出会是随机数。输出时用数组输出就OK啊
#include <stdio.h>

int main(int argc, char *argv[])
{
    int num[5];
    int i;
    int *p;
    p=num;                     
    for (i=0;i<5 ;i++)
    {
        *p=i+1;   
        p++;
                                                                     
    }
    for(int j=0;j<5;j++)
        printf("%d   ",num[j]);
    putchar('\n');

   return 0;
}

2011-05-02 10:30
loveshuang
Rank: 9Rank: 9Rank: 9
来 自:湖北武汉
等 级:蜘蛛侠
帖 子:270
专家分:1198
注 册:2010-11-14
收藏
得分:0 
第二个问题中你说的scanf不接受换行符有问题吧,它是把换行符放在缓冲区的只是没有读入变量中,gets接受换行符,它有截取功能在换行符前自动加上'\0’的。你说的输入字符超过数组范围也正确可能是数组所在的内存区可以容纳多个字符,用指针可以连续访问那个内存块,我输入6个时可以输出六个,但是输11个就会出现严重错误超出了内存块,建议你看看内存的讲解。个人愚见,期待更好的回答。
2011-05-02 10:41
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
收藏
得分:7 
1.
 for (i=0;i<SIZE ;i++)
    {
        *(p+i)=i+1;//( p++;)不需要  
    }
2.有可能是溢出了。
3.这是定义的字符串指针。
2011-05-02 10:58
sulang123
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2011-2-4
收藏
得分:0 
嗯,我刚刚测试了一下,的确是这样的,如果用数组来输出就没有问题

还有一个办法就是for循环那里的代码弄成一个函数,把指针地址传给函数,然函数进行处理,这样下面的输出就没有问题了
2011-05-02 11:01
快速回复:应用指针时候遇到几个问题;
数据加载中...
 
   



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

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