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;}
时间: 2024-11-06 01:04:33