您的位置:首页 > 编程语言 > C语言/C++

C++关于数组与指针一些值得注意的笔记

2013-08-08 22:18 399 查看
   数组

显式初始化的数组不需要制定数组的维数值;

   int arr[] = {0,1,2};  //[]中维数值可以省略

②vector使用vector::size_type作为下标的类型,数组下标类型是size_t;

int main()

{

   const size_t array_size = 7;

   int ia1[] = {0,1,2,3,4,5,6};

   int ia2[array_size];                 //使用size_t类型数值来定义数组大小

   for (size_t ix = 0; ix != array_size; ++ix)            //从ia1复制数据到 ia2

            ia2[ix] = ia1[ix];

   return 0;

}

   指针

①指针相减用标准库类型ptrdiff_t(signed整型)数据储存(在cstddef头文件中定义)

  #include<cstddef>

  int ia[] = {0, 2, 4, 6, 8};

  int *ip = ia;            

  int *ip2 = ip + 4;

  ptrdiff_t n = ip2 - ip1;

  //这个数值为signed整型数据,表示位置关系

 

②指针下标

  int *p = &a[2];

  于是   p[1] == *(p + 1)     //相当于a[3] 

          p[-2] == *(p - 2)     //相当于a[0]

 

③指向const 对象的指针

 指向const对象的指针必须具有const特性(即使木有,也默认有了)

  const double pi = 3.14;

  double pi2 = 2.7;

  double *ptr = π   //错误,pi具有const特性

  const double *cptr = π      //ok,

  const double *cptr2 = &pi2;    //ok,但不能通过*cptr2修改pi2的值.

 PS:这种指针可以更改指向,不可更改所指向的值.

 

④const指针

 具有const特性的指针,定义时需要初始化,并且不能更改.

 int Numb = 0;

 int *const curErr = &Numb;  //一旦初始化,指向不能更改.

 PS:这种指针不可更改指向,但可以更改所指向的非const对象的值.

 

⑤指向const对象的const指针.(③+④)

 const double *const pi_str = π

 PS:既不能更改指向,也不能更改所指向的值.

 

 动态创建数组(使用new和delete)

一,定义与初始化

   int *pia = new int[10](); 

  //创建含有10个元素的数组,在数组后的圆括号()是对编译器初始化数组的要求,所有元素置为0.

二,动态分配空数组.

   size_t n = get_size();               //get_size()是一个获取用户提供值的函数

   int *p = new int
;               //动态创建维数值为n的int数组并返回数组第一个元素的地址,保存于p指针中

  for(int*q = p; q != p+n; q++)

    {}                 //对该数组进行操作

三,动态空间释放.

  delete [] pia;  

  //此处的方括号[]很重要,告诉编译器所释放的是一个数组,若缺少,内存只会释放数组的一个元素的空间,从而产生内存泄漏(memory leak).

 

 

C++ PRIMER中 C风格的字符串 也是数组一大知识点,但它告诉我们要尽量避免使用C风格的字符串,

应该尽量使用c++所提供的标准库string类型.不仅简单,容易理解,而且不易出错.个人还是偏向使用string类型对象,

所以本篇就省略对 C风格的字符串 的相关笔记, 有需要时再作整理.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ 指针 数组