嵌入式系统学习Day13(C语言中数组与指针的结合)

上一篇已经讲过一维整型数组与指针,所以本篇主要讲其余数组与指针的结合应用。

一.二维整形数组+指针

主要写法:

char s[10] = "hello";  //字符串 --- 存放在栈空间 
                       // 堆区  也可以放 
                       // 全局 
                       // 字符串常量区

char *p = "hello"; //字符串常量 --没有数组名的数组 

char *p = s;

eg:
   strlen

int Strlen(const char *s)
{
   int i=0;
   while(*s != '\0')    
    {
         i++;
         s++;
    }
     return i;
 }

strcpy 

 char * Strcpy(char *s1,const char *s2)
  {
      char *ret=s1;
      while(*s2 != '\0')
      {
          *s1=*s2;
          s1++;
          s2++;
      }
      s1='\0';
  
      return ret;
  
  }

strncpy

char *Strncpy(char *s1, const char *s2,int n)
  {
      char *ret=s1;
      while(n && *s2!='\0')
      {
          *s1=*s2;
          s1++;
          s2++;
          --n;
          while(n!=0)
          {
              *s1=0;
              s1++;
              --n;
          }
      }
      return ret;
  }

strcat

 char *Strcat(char *dest,const char *src)
  {
      char *ret=dest;
      while(*dest != '\0')
          dest++;
      while(*dest++=*src++);
      return ret;
  }

strncat

char *Strncat(char *dest,const char *src,int n)
  {
      char *ret=dest;
      while(*dest != '\0')
          dest++;
      while(n && (*dest=*src));
      {
          dest++;
          src++;
          n--;
      }
      *dest='\0';
      return ret;
  }

strcmp

 int Strcmp(const char *s1,const char *s2)
  {
      int t;
      while(*s1!='\0' && *s1==*s2)
      {
          s1++;
          s2++;
      }
          t=*s1-*s2;
      return t;
  
  }

strncmp

 int Strncmp(const char *s1,const char *s2,int n)
  {
     int t;
     while(n-1 && *s1!='\0' && *s1==*s2)
     {
         s1++;
         s2++;
         n--;
     }
         t=*s1-*s2;
     return t;
 
 }

二.一维字符型数组+指针

int (*p) [4]; //表示定义了一个指针 指向int[4]这种类型 
              //指向的目标是个数组类型 --- 数组指针

*(p+1)  //代表  第 1 行的首元素的地址 

*(p+1) + 1   // 第1行 第1列 元素的地址 
*(*(p+1) + 1) //  第1行 第1列 的 元素

 eg:

实现一个函数 找出数组中最大值

  int Findmax(int(*p)[4],int row)
  {
      int i=0;
      int j=0;
      int max=*(*(p));
      for(i=0;i<row;++i)
      {
          for(j=0;j<4;++j)
          {
              if(*(*(p+i) +j)>max)
                  max=*(*(p+i) +j);
          }
          
      }
      return max;
  
 }

三.二维字符型数组+指针

指针 + 字符二维数组 
char s[3][10] = {"hello","world","china"};

char (*p)[10] = s;
 
eg:
   实现一个输入函数,可以从键盘输入字符串 

 char* Findmax(char (*p)[10],int row)
  {
      char max[10];
      int i=0;
      for(i=0; i<row; ++i)
      {
          if(strcmp(*(p+i),max)>0)
              strcpy(max,*(p+i));
      }
  return *max;
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值