C++入门Step06【数组与指针IMPT】

数组与指针:(Important)

  1. 数组元素的地址:(如何使用指针来存储数组元素的地址呢?)

    int num[100] = {0};
    int* p_num[100] = {0};
    for(int idx = 0; idx < 100; ++idx)
    {
        p_num[idx] = &num[idx];
    }
    

    这样的操作没有任何语法或者逻辑错误,但是我们Duck不必如此麻烦。

  2. 数组名就是数组首地址:

    ①为了避免上面说的情况,C/C++中规定数组名字就是数组的首地址。注意,是数组的首地址,也就是数组的第0个元素的地址,即:

    int num[100] = {0};
    int* pnum = &num[0];
    //这里的 num 和 pnum 的值应该是一样的
    

    ②C/C++中规定如果指针变量p已经指向数组中的一个元素,则p+1指向同一数组中的下一个元素的地址(而不是将p的值简单+1),p-1同理。

    int num[100] = {0};
    int* pnum_0 = &num[0];
    int* pnum_1 = &num[1];
    pnum_0 += 1;
    //执行以上代码之后,这里面pnum_0的值应该和pnum_1的值是相等的。
    

    ③数组的名字是数组的首地址,可以把他理解为一个指针,但是这个指针是:int * const 类型的,也就是说不能改变其存储的地址。
    不过,可以做如下操作:

    int num[100] = {0};
    int* pnum = num;	//(定义一个新指针pnum,自由指向(存储)地址)
    

    这里的 pnum 是可以移动的,所以就可以指向数组num中的任意一个元素喽!例如遍历一个数组:

    int num[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    int* pnum = num;
    for(int idx = 0; idx < 10; ++idx)
    {
      cout << *(pnum+idx) << endl;
    }
    

    ④访问数组的两种方法:
    下标法:num[0];
    指针法:*(pnum+idx)

  3. 练习:

    1. 定义两个字符数组输入如下:
      char str1[50] = {0}, str2[] = “I Love C++!”;
      用指针的方式,实现将 str2 拷贝到 str1 中。

      #include<iostream>
      using namespace std;
      
      void arycp(char* str1 ,char* str2)
      {
          for(;*str2 != 0;)
          {
              *str1++ = *str2++;
          }
      }
      int main()
      {
          char str1[50] = {0} ,str2[] = "I Love C++!";
          arycp(str1 ,str2);
          return 0;
      }
      
    2. 输入一个字符串,例如:
      a123x456__17960?302ab5876
      将其中连续的数字作为一个整数,依次存放到一个数组中a中,例如:123放在a[0]中,456放在a[1]中。统计共有多少个整数,并输出这些整数

      #include<iostream>
      using namespace std;
      //未写完
      void find_num(int* ary_num ,char* ary_str)
      {
          while(*ary_str != 0)
          {
              if(48 <= *ary_str && *ary_str<57)
              {
                  cout << "ary_atr = "<< *ary_str <<endl;
                  *ary_num++ = (*ary_str-'0');
              }
              ary_str++;
          }
      }
      
      int main()
      {
          int ary_num[50] = {0};
          char* ary_str = "a123x456__17960?302ab5876";
          find_num(ary_num ,ary_str);
          for(int i=0;i<50;i++)
          cout << ary_num[i] <<endl;
          return 0;
      }
      
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值