zoukankan      html  css  js  c++  java
  • c++数组和指针

    1.指针的运算,++,--,+,-

       int  var[MAX] = {10, 100, 200};
       int  *ptr;
    
       // 指针中的数组地址
       ptr = var;
       for (int i = 0; i < MAX; i++)
       {
          cout << "Address of var[" << i << "] = ";
          cout << ptr << endl;
    
          cout << "Value of var[" << i << "] = ";
          cout << *ptr << endl;
    
          // 移动到下一个位置
          ptr++;
       }

    2. 如果定义个一个数组var,如果var加上运算符的话是不可以的

    比如

       int  var[MAX] = {10, 100, 200};
     
       for (int i = 0; i < MAX; i++)
       {
          *var = i;    // 这是正确的语法
          var++;       // 这是不正确的
       }
       return 0;

    3.因为c++中没有String的变量类型,只有char,所以可以用指针数组的形式来表达string

    比如

       const char *names[MAX] = {
                       "Zara Ali",
                       "Hina Ali",
                       "Nuha Ali",
                       "Sara Ali",
       };
     
       for (int i = 0; i < MAX; i++)
       {
          cout << "Value of names[" << i << "] = ";
          cout << names[i] << endl;
       }
       return 0;

    4.关于指针和数组的一些常识

    1、实际上并不存在多维数组,所谓的多维数组本质上是用一维数组模拟的。
    
    2、数组名是一个常量(意味着不允许对其进行赋值操作),其代表数组首元素的首地址。
    
    3、数组与指针的关系是因为数组下标操作符[],比如,int a[3][2]相当于*(*(a+3)+2) 。
    
    4、指针是一种变量,也具有类型,其占用内存空间大小和系统有关,一般32位系统下,sizeof(指针变量)=45、指针可以进行加减算术运算,加减的基本单位是sizeof(指针所指向的数据类型)。
    
    6、对数组的数组名进行取地址(&)操作,其类型为整个数组类型。
    
    7、对数组的数组名进行sizeof运算符操作,其值为整个数组的大小(以字节为单位)。
    
    8、数组作为函数形参时会退化为指针。

    5.指向指针的指针

       int  var;
       int  *ptr;
       int  **pptr;
    
       var = 3000;
    
       // 获取 var 的地址
       ptr = &var;
    
       // 使用运算符 & 获取 ptr 的地址
       pptr = &ptr;
    
       // 使用 pptr 获取值
       cout << "Value of var :" << var << endl;
       cout << "Value available at *ptr :" << *ptr << endl;
       cout << "Value available at **pptr :" << **pptr << endl;

    6.传递指针给函数

    using namespace std;
    void getSeconds(unsigned long *par);
    
    int main ()
    {
       unsigned long sec;
    
    
       getSeconds( &sec );
    
       // 输出实际值
       cout << "Number of seconds :" << sec << endl;
    
       return 0;
    }
    
    void getSeconds(unsigned long *par)
    {
       // 获取当前的秒数
       *par = time( NULL );
       return;
    }

    以上的例子传递一个unsigned long型指针给函数getSeconds,并且在函数内部改变指针的值

    7.函数返回类型为指针

    // 要生成和返回随机数的函数
    int * getRandom( )
    {
      static int  r[10];
     
      // 设置种子
      srand( (unsigned)time( NULL ) );
      for (int i = 0; i < 10; ++i)
      {
        r[i] = rand();
        cout << r[i] << endl;
      }
     
      return r;
    }
     
    // 要调用上面定义函数的主函数
    int main ()
    {
       // 一个指向整数的指针
       int *p;
     
       p = getRandom();
       for ( int i = 0; i < 10; i++ )
       {
           cout << "*(p + " << i << ") : ";
           cout << *(p + i) << endl;
       }
     
       return 0;
    }

     *****:注意函数无法返回一个完整的数组,但是可以返回一个指针

     
  • 相关阅读:
    SQL日常维护的语句
    87岁老奶奶用微软自带画图软件绘画 惊艳了世人
    87岁老奶奶用微软自带画图软件绘画 惊艳了世人
    87岁老奶奶用微软自带画图软件绘画 惊艳了世人
    .NET开源项目小功能组件
    .NET开源项目小功能组件
    .NET开源项目小功能组件
    常用 SQL Server 规范集锦
    常用 SQL Server 规范集锦
    常用 SQL Server 规范集锦
  • 原文地址:https://www.cnblogs.com/otakuhan/p/8598772.html
Copyright © 2011-2022 走看看