总结了一些指针易出错的常见问题(二)

4.指针与数组

   一些常见的错误观点是数组和指针是完全可以互换的。尽管数组名字有时候可以当指针来使用,但是数组的名字不是指针。

  数组是能用索引访问的同质元素连续集合。(连续是指数组的元素在内存中是相邻的,中间不存在空隙同质是指元素是同一类型)

  指针在处理数组时很有用,既可以用指针指向已有的数组,也可以从堆上分配内存然后把这块内存当做一个数组使用。

  数组/指针表示法

  给数组地址加1实际加了4,也就是整数的长度。

#include<iostream>
using namespace std;
int main()
{
    int vector[5]={1,2,3,4,5};
    int *pv=vector;
    int value=4;
    for(int i=0;i<5;i++)
    {
        *pv++ *=value;
    }
    pv=vector;
    for (int i=0;i<5;i++)
    cout<<*(pv+i)<<endl;
 } 

  指针和数组的区别

int vector[5]={1,2,3,4,5};
    int *pv=vector;

  vector[i]生成的代码和*(vector+i)生成的不一样,vector[i]表示法生成的机器码从位置vector开始,移动i个位置,取出内容。而*(vector+i)表示法生成的机器码则是从vector开始,在地址上增加i,然后取出这个地址中的内容。

  sizeof操作符对数组和同一个数组的指针操作也是不同的。

  sizeof(vector)=20;  //数组分配的字节数

  sizeof(pv)=4;           //指针长度

  如果从堆上分配内存并把地址赋给一个指针,那就肯定可以对指针使用数组下标并把这块内存当成一个数组。

int *pv=(int*) malloc(5*sizeof(int));
    for(int i=0;i<5;i++)
        {
            pv[i]=i+1;
         }
/////////////////////////////////////
  for(int i=0;i<5;i++)
{
  *(pv+i)=i+1;
}
posted @ 2016-06-22 14:56  QualityAssurance21  阅读(414)  评论(0编辑  收藏  举报