24小时热门版块排行榜    

查看: 776  |  回复: 10

文俊点点

木虫 (著名写手)

[求助] 指针问题

char ch[];
把ch通过函数传地址的方式给 char *sptr;
在函数内部,char *p = sptr;可以遍历数组,

用p=sptr;也可以遍历数组。

第一种会循环很多次然后结束,第二种是遍历数组的长度次数。

按照理解,第一种应该不能遍历的啊。   那么*p的内容应该是什么。





void paixu(int length, char *sptr)
{
  char *p = sptr;
  //p = sptr;  
  int i = 0;

  while(1)
  {
    if(*p == 'c'|| *p == 0)
    {
   //
      break;
    }
   p++;
  }
}












[ Last edited by 文俊点点 on 2012-4-15 at 14:31 ]
回复此楼

» 猜你喜欢

这是你所拥有的时间·····这是你所能改变的生活·········
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lurencyj

木虫 (著名写手)

【答案】应助回帖

★ ★
感谢参与,应助指数 +1
文俊点点: 金币+2, ★★★★★最佳答案, 第一种是怎么遍历的········?把地址赋给*P,怎么理解?*p里面是数组的首地址? 2012-04-15 16:59:22
“按照理解,第一种应该不能遍历的啊。”

楼主怎么理解的啊?两种都是可以遍历的,而且没有循环次数的区别
CODE:
#include                                                                                                             

using namespace std;
void paixu(int length, char *sptr)                                                                                                         
{      
        char *p = sptr;                                                                                                                    
        //p = sptr;                                                                                                                        
        int i = 0;                                                                                                                        
        
        while(1)                                                                                                                           
        {      
                cout << *p << ",";                                                                                                         
                if(*p == '\0')                                                                                                            
                {      
                        break;                                                                                                            
                }
                p++;                                                                                                                       
        }
        cout << endl;                                                                                                                     
}                                                                                                                                          

int main(int argc, char *argv[])                                                                                                           
{      
        char p[] = "abcdefg";                                                                                                              
        paixu(9, p);
        cout << "out " << endl;
        for (int i = 0; i< 9; i++)
                cout << p[i] << "; ";                                                                                                      
        return 0;                                                                                                                          
}

» 本帖已获得的红花(最新10朵)

很女子很弓虽大
2楼2012-04-15 16:38:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

文俊点点

木虫 (著名写手)

送鲜花一朵
引用回帖:
2楼: Originally posted by lurencyj at 2012-04-15 16:38:50:
“按照理解,第一种应该不能遍历的啊。”

楼主怎么理解的啊?两种都是可以遍历的,而且没有循环次数的区别


#include <iostream>                                                                 ...

可以啊·········在gcc里面第一种也可以,而且遍历的次数很多。查了输出赋值的几个字符外,还输出很多火星文。
这是你所拥有的时间·····这是你所能改变的生活·········
3楼2012-04-15 16:57:12
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

文俊点点

木虫 (著名写手)

帖子不能修改了 郁闷啊·············

我的意思是*p=pstr;  *p里面存放的是数组的首地址,那么取值的时候,*p的值应该是pstr啊,怎么回是赋值的那个字符呢·······
这是你所拥有的时间·····这是你所能改变的生活·········
4楼2012-04-15 17:17:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lurencyj

木虫 (著名写手)

【答案】应助回帖

引用回帖:
3楼: Originally posted by 文俊点点 at 2012-04-15 16:57:12:
可以啊·········在gcc里面第一种也可以,而且遍历的次数很多。查了输出赋值的几个字符外,还输出很多火星文。

g++ 编译。因为都已经用了iostream和using namespace了。。。。
很女子很弓虽大
5楼2012-04-15 18:22:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lurencyj

木虫 (著名写手)

【答案】应助回帖

★ ★
文俊点点: 金币+2 2012-04-18 20:07:25
引用回帖:
4楼: Originally posted by 文俊点点 at 2012-04-15 17:17:31:
帖子不能修改了 郁闷啊·············

我的意思是*p=pstr;  *p里面存放的是数组的首地址,那么取值的时候,*p的值应该是pstr啊,怎么回是赋值的那个字符呢·······:s ...

你说的这句*p=pstr一定要说明清楚情况,

char *p = pstr; 和 直接的*p=pstr是完全不同的。

char *p=pstr;
/* 定义char类型的指针p, 指针p的值被赋值成pstr。
* 这语句的结果是p指向了pstr指向的那个char内存 */

*p=pstr;
/* 把指针p指向的值赋值成pstr的值 */
很女子很弓虽大
6楼2012-04-15 18:27:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lurencyj

木虫 (著名写手)

【答案】应助回帖

看指针的时候,最好能画一个内存地图,这样就不会弄错了。
很女子很弓虽大
7楼2012-04-15 18:33:47
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sudo

木虫 (正式写手)

我怀疑楼主是没搞明白这个:

定义变量时候的初始化
CODE:
char *p = str;

效果上等价于,先定义后赋值
CODE:
char *p;
p = str;

» 本帖已获得的红花(最新10朵)

8楼2012-04-15 21:24:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

nakada3861

新虫 (正式写手)

【答案】应助回帖


感谢参与,应助指数 +1
文俊点点: 金币+1, ★★★很有帮助 2012-04-18 20:08:07
(*p)就是p指针所指向内存中的存储内容啊。
9楼2012-04-16 08:15:07
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

南山小镇

银虫 (小有名气)

【答案】应助回帖

★ ★
感谢参与,应助指数 +1
文俊点点: 金币+2, ★★★★★最佳答案 2012-04-18 20:09:10
引用回帖:
4楼: Originally posted by 文俊点点 at 2012-04-15 17:17:31:
帖子不能修改了 郁闷啊·············

我的意思是*p=pstr;  *p里面存放的是数组的首地址,那么取值的时候,*p的值应该是pstr啊,怎么回是赋值的那个字符呢·······:s ...

大哥,不是你这样理解的.

char *p=pstr; 是定义p为指针,并指向地址pstr.  但*p是指的pstr里的内容,而不是pstr.

还有, 上面 char *p=pstr;后紧跟// p=pstr;    不知道源程序否刚好是这样,这是一个解释说明的内容. //是行解释符号.  只是起说明作用,编译时,这一段是不会被编译的.

我也就知道这么多.其实源程序我还没太明白你说的什么.
10楼2012-04-17 20:38:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 文俊点点 的主题更新
信息提示
请填处理意见