指针学习四——指针、数组、地址
指针、数组、地址 指针是以地址作为值的变量,数组名的值是一个特殊的固定地址,看作是指针常量。 int a[100] , *p; 系统把编号为3000,30002...的内存字节作为数组元素a[0],a[1]...的地址。 基地址:内存位置3000是数组a的基地址,即a[0]的地址。 地址常量:数组名a是一个地址常量。 p=a; p=&a[0]; 语句等价,都把3000这个地址值赋给了指针p。 p=a+1; p=&a[1]; 同样,也是等价的,都把3002这个地址值赋给了指针p。 指针 内存地址 内存单元 数组元素 p 3000 a[0] p+1 3002 a[1] p+2 3004 a[2] 数组元素求和: 法一: sum=0; for(p=a;p<=&[99];p++) sum+=*p; *(a+i)与a[i]等价——地址+1为下一个地址,实际增加的不为一。 法二: sum=0; for(p=a;p<=&[99];p++) sum+=*(a+1); 法三: p=a; sum=0; for(i=0;i<100;++i) sum+=p[i]; 1.数组a是指针常量,不是变量。a++是非法的。 2.变量p是指向某个指定类型的指针,p+1代表访问的是下一个变量的内存地址。p+i是有意义的。 3.若p和q都是指向数组的指针,p-q产生一个int型的值,表示之间的数组元素的个数。 4