指针 数组 字符串 初学者总结

指针 数组 字符串 初学者总结,第1张

指针 数组 字符串 初学者总结
  1. 一级指针
  1. 指针变量的定义:类型*,解引用:*变量名
  2. 指针变量也称地址变量(保存地址):int* p=&a; int a=10;
  3. 指针变量保存相同数据类型
  4. 元素访问:*p->解引用,int* p=&a;*p=20;(间接访问)
  1. 指针与数组的关系
  1. 数组首元素地址为:arr(数组名)
  2. 数组名+1->加一个单元格(与类型有关)
  3. *arr=arr[0] 表示数组首元素地址->*(p+i)=p[i]
  4. 野指针:int* p;悬挂指针,不可解引用
  5. 空指针:int* p=NULL;不可解引用

3.指针与const的结合

(1)int a=10; const int* p=&a; ->不能修改指向变量的值

     p=&b;//right   *p=100;//error

     可以指向a,也可以指向b,不能修改a

(2)int a=10; int* const p=&a; ->修改指针变量本身

     P=&b;//error   *p=100;//right

     一经指向a,不能指向其他地址,没有限定a本身的值是否被改变

(3)const int a=10;//a为常变量

     int* p=&a;//error  *p=10;//error

     const int* p=&a;//right

     a本身的值已经确定,不能改变a的值

(4)const int* const p=&a;

     -> p指向a,不能指向其他变量,p不能改变a本身的值

4.字符串相关 *** 作

(1)字符串定义

A. char ch[ ]="hello";(可以修改hello本身)

字符串长度:int len_ch=sizeof(ch)/sizeof(ch[0]); ->6=5+1(‘’)

                 int len_string=strlen(ch); ->5第一个‘’前面字符个数

const char* p=&a;(不能修改hello本身)

  char* p=”hello”;//error

B.char ch[]={‘h’,’e’,’l’,’l’,’o’};

字符串长度:int len_ch=sizeof(ch)/sizeof(ch[0]); ->5(无‘’)

结尾标记:以‘’作为结尾标记

(2)两个字符串之间的关系

A.字符串长度函数*********************************************

    unsigned int my_strlen(const char* str)

{

       assert(str != NULL);

       unsigned int count = 0;

       while (*str != '')

       {

         count++;

         str++;

       }

       return count;

}

int main()

{

       const char* str = "defghi";

       int res = my_strlen(str);

       printf("%d", res);

}

B.字符串比较 *** 作***************************************************

int my_strcmp(const char* str1, const char* str2)

{

        assert(str1 != NULL && str2 != NULL);

        while (*str1 == *str2)

       {

           if (*str1 == '' && *str2 == '')

           {

                return 0;

           }

           str1++;

           str2++;

        }

        if (*str1 > *str2)

       {

           return 1;

       }

       else if (*str1 < *str2)

       {

           return -1;

       }

}

int main()

{

         const char* str1 = "abc";

         const char* str2 = "abs";

         int res = my_strcmp(str1, str2);

         printf("%d", res);

         return 0;

}

C.字符串拷贝 *** 作****************************************************

char* my_strcpy(char* str1, const char* str2)

{

        assert(str1 != NULL && str2 != NULL);

        while (*str2 != '')

       {

          *str1 = *str2;

          str1++;

          str2++;

      }

          *str1 = '';

          return str1;

}

int main()

{

       char str1[10] = "abc";

       const char* str2 = "defghi";

       char* res = my_strcpy(str1, str2);

       printf("%s", str1);

}

D.字符串拼接 *** 作****************************************************

char* my_strcat(char* str1, const char* str2)

{

        assert(str1 != NULL && str2 != NULL);

        int len = strlen(str1);

        int i = 0;

        //给str1链接str2数据

        for (; i < strlen(str2); i++)

        {

           str1[len + i] = str2[i];

        }

        str1[len + i] = '';//字符串结尾标记''

        return str1;

}

int main()

{

        char ch[10] = "abc";//''

        char* res = my_strcat(ch, "def");//def链接在abc后面

        //strcat(char *str1,const char *str2)

        printf("%s", res);

        return 0;

}

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zaji/5635464.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-16
下一篇2022-12-16

发表评论

登录后才能评论

评论列表(0条)

    保存