总结了一些指针易出错的常见问题(二)
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;
}
本文版权归作者所有,转载请注明出处http://www.cnblogs.com/iloverain/.未经作者同意必须保留此段声明,否则保留追究法律责任的权利.