手机单机游戏网站大全,创意产品,一天能免费看3次的app,佛山高端画册设计公司一、问题 常听说数组实质就是指针#xff0c;是这样的吗#xff1f;
二、解答 数组是⼀组数#xff0c;这组数⽤下标相区分#xff0c;例如#xff1a;
int a[5] {1, 3, 5, 4, 8}; 产⽣5个数#xff0c;这5个数是 a[0]、a[1]、…、a[4]。 指针是⼀个变量的地址。例如是这样的吗
二、解答 数组是⼀组数这组数⽤下标相区分例如
int a[5] {1, 3, 5, 4, 8}; 产⽣5个数这5个数是 a[0]、a[1]、…、a[4]。 指针是⼀个变量的地址。例如
int *p;
int a 5;
p a;p是另⼀指针变量⽤于保存另⼀变量的地址。 这样说来指针与数组间没有任何联系。 按上⾯的定义p和a如果再有如下语句
p a[0]; 这样由于数组在内存中连续分配内存,假设 a[0]地址为 2000整型占两个字节p的值是2000*p为1即 a[0]。 2000 1 a[0]2002 3 a[1] 2004 5 a[2]2006 4 a[3]2008 8 a[4] 注意p1 的值不是 2001。C语⾔中 p1的值是由P的定义来决定的定义时指向⼏个字节的变量指针加1就加⼏个字节。由于p的定义是 int*p: int 占两个字节因此p1 就是两个字节是2002正好就是 a[1]的地址。
因此
p1 值为2002*(p1)为5即 a[l]
pi 即是a[i],⽽*(pi)即为a[i] 以上int占两个字节只是⼀种假设因为 int 所占字节数实际在不同系统中是不⼀样的 但⽆论是两个字节还是四个字节得到的结论是⼀样的。 C语⾔中规定数组名表⽰数组⾸地址即 a 即为a[0] 因此
a1 即 *a[1];
*(a1)即 a[l]
*(ai)即 a[i] C语⾔规定指针变量也可以表⽰成下标写法即
*(p1)可以写成p[1] 到此为⽌数组的所有表示法 a[i]ai*(ai) 都可以有对应的指针表⽰法 p[i],pi,*(pi)于是结论“数组即指针指针即数组〞好像就成⽴了。 其实这两种说法都是错的只能说明在表示法上⼆者可以有相同的⽅法。下⾯再对⼆者做⼀区分。 数组名表示数组⾸地址可以说数组名是数组的指针但它不是变量只是⼀个常量 即不能对数组名a进⾏重新赋值。⽽指针变量是变量可以重新赋值。 程序中可以这样写
p a[l];
p p1;
p; 以上写法都是正确的。
a p;
a a1;
a; 以上三种写法试图对a的重新赋值都是错误的。
三、总结 指针与数组是两个完全不同的概念当⽤指针表示数组时⼆者都有下标表示法和*号表示法数组名是⼀数组的⾸地址是常量指针变量可以指向数组是变量。