Chinaunix首页 | 论坛 | 博客
  • 博客访问: 373042
  • 博文数量: 57
  • 博客积分: 4020
  • 博客等级: 上校
  • 技术积分: 647
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-17 15:57
文章分类

全部博文(57)

文章存档

2009年(22)

2008年(35)

我的朋友

分类: C/C++

2008-06-02 23:52:34

C语言 指针学习笔记 5

Author:yuexingtian

Date:Sunday, June 02, 2008

/*指向多维数组的指针变量*/

 

main()

{

  int a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};

 

  int (*p)[4];

 

  int i,j;

 

  p=a;

 

  for(i=0;i<3;i++)

  {

 

    for(j=0;j<4;j++)

 

    printf("%2d ",*(*(p+i)+j));

 

    printf("\n");

   }

 

getch();

}

测试结果:

 

1、输出字符串中n个字符以后的所有字符。

程序如下:

/* */

 

main()

{

  char *ps="The auther is yuexingtian";

 

  int n=14;

 

  printf("%s\n",ps);

 

  printf("The leave's numbers are:\n");

 

  ps=ps+n;

 

  printf("%s\n",ps);

 

  getch();

  }

测试结果:

 

2、在输入的字符串中查找有无‘y’字符。

main()

{

  char st[20],*ps;

 

  int i;

 

  printf("input a string:\n");

 

  ps=st;

 

  scanf("%s",ps);

 

  for(i=0;ps[i]!='\0';i++)

 

    if(ps[i]=='y')

 

    {

 

       printf("there is a 'y' in the string\n");

 

       break;

 

    }

 

  if(ps[i]=='\0')

 

   printf("There is no 'y' in the string\n");

 

  getch();

}

 

测试结果:

 

3、把一个字符串的内容复制到另一个字符串中(把字符串指针作为函数参数的使用)。

要求:不能使用strcpy函数。   

/*把字符串指针作为函数参数的使用*/

main()

{

 

   char *pa="yuexingtian",b[20],*pb;

 

   pb=b;

 

   cpystr(pa,pb);

 

   printf("string a=%s\nstring b=%s\n",pa,pb);

 

   getch();

}

 

cpystr(char *pss,char *pds)

{

 

  while((*pds=*pss)!='\0')

  {

   pds++;

 

   pss++;

   }

}

测试结果:

说明:

     函数cprstr的形参为两个字符指针变量,pss指向源字符串,pds指向目标字符串。

学习表达式(*pds=*pss!=’\0’)的用法。

程序完成了两项工作:一是把pss指向的源字符串复制到pds所指向的目标字符串中,二是判断所复制的字符是否为`\0',若是则表明源字符串结束,不再循环。否则,pdspss都加1,指向下一字符。在主函数中,以指针变量pa,pb为实参,分别取得确定值后调用cprstr函数。由于采用的指针变量papss,pbpds均指向同一字符串,因此在主函数和cprstr函数中均可使用这些字符串。也可以把cprstr函数简化为以下形式:

cprstr(char *pss,char*pds)

 

      {while ((*pds++=*pss++)!=`\0');}

 

    即把指针的移动和赋值合并在一个语句中。 进一步分析还可发现`\0'ASCⅡ码为0,对于while语句只看表达式的值为非0就循环,为0则结束循环,因此也可省去“!=`\0'”这一判断部分,而写为以下形式:

      cprstr (char *pss,char *pds)

 

{while (*pdss++=*pss++);}

 

表达式的意义可解释为,源字符向目标字符赋值,移动指针,若所赋值为非0则循环,否则结束循环。这样使程序更加简洁。

 
阅读(2010) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

yuexingtian2008-06-04 15:39:03

这一天是Monday,星期写错了,但日期没有写错!呵呵……

yuexingtian2008-06-03 23:08:28

第3小题简化后的程序如下所示: main() { char *pa="yuexingtian",b[20],*pb; pb=b; cpystr(pa,pb); printf("string a=%s\nstring b=%s\n",pa,pb); getch(); } cpystr(char *pss,char *pds) { while(*pds++=*pss++); }