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 = ; i < MAX; i++)
   {
      cout << "Value of names[" << i << "] = ";
      cout << names[i] << endl;
   }
   return ;

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

、实际上并不存在多维数组,所谓的多维数组本质上是用一维数组模拟的。

、数组名是一个常量(意味着不允许对其进行赋值操作),其代表数组首元素的首地址。

、数组与指针的关系是因为数组下标操作符[],比如,int a[][]相当于*(*(a+)+) 。

、指针是一种变量,也具有类型,其占用内存空间大小和系统有关,一般32位系统下,sizeof(指针变量)=。

、指针可以进行加减算术运算,加减的基本单位是sizeof(指针所指向的数据类型)。

、对数组的数组名进行取地址(&)操作,其类型为整个数组类型。

、对数组的数组名进行sizeof运算符操作,其值为整个数组的大小(以字节为单位)。

、数组作为函数形参时会退化为指针。

5.指向指针的指针

int  var;
   int  *ptr;
   int  **pptr;

   var = ;

   // 获取 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 ;
}

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;
}

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

 

相关推荐