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

本文详细介绍了C++中的指针,包括指针变量的定义与解引用,指针与数组的关系,以及指针与const的结合。特别强调了不同情况下const关键字对指针的影响。此外,还探讨了字符串的定义、长度计算、比较、拷贝和拼接等操作,通过示例展示了相关函数的实现。
摘要由CSDN通过智能技术生成
  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(‘\0’)

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

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(‘\0’)

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

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

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

    unsigned int my_strlen(const char* str)

{

       assert(str != NULL);

       unsigned int count = 0;

       while (*str != '\0')

       {

         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 == '\0' && *str2 == '\0')

           {

                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 != '\0')

       {

          *str1 = *str2;

          str1++;

          str2++;

      }

          *str1 = '\0';

          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] = '\0';//字符串结尾标记'\0'

        return str1;

}

int main()

{

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

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

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

        printf("%s", res);

        return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值