总结:一个指针变量,用数组方式访问指针所指向的数值时,可以把数组下表的形式转化成指针的形式,转化完成后,如果地址有效,则用数组的方式访问指针所指向的数值是合法的。例如,
上述操作中p[0]可以转化成*p实际上就是对a赋值,p[1]可以转化成*(p 1)实际上对b赋值
(1)指针和数组的关系
{
char *string="i love china";
printf("%s \n",string);
printf("%c
}
输出结果;
由此可以看出指针和数组的密切关系。自己一定要多加理解,再深入研究和应用。
数组名和指针虽然在功能上相近,但还是有区别的,数组名和指针之间有一个不同之处。指针式一个变量所以可以进行赋值和自加自减的操作,语句p=a 和
指针和数组之间的关系:
指针的基本思想是以地址代实物,以小管大,以简代繁,其本质是包含某个变量地址的一个变量。而数组名代表的是一个物理地址,数组下标是逻辑地址,从而决定了这两者之间有密切联系,主要有如下两点:
①任何可以由数组实现的*作也能由指针实现。这是因为指针和数组名都是地址,任一数组元素均可由指针表示。
②在使用形式上,指针的使用亦可采用数组的表示法,以获得好的可读性。指针的可读性要比指针要强。
指针与数组作为两种不同的数据类型,必然有其区别,主要有如下五点:
①数组具有静态特征,而指针有更多的动态特性和灵活性。数组一经定义,其基址和大小便固定了,在该数组的有效使用范围内是不可变的;但是指针则具有很强的动态特征,可以动态地指向任一该类型(定义决定)变量,这也就决定了它有更大的灵活性。
②指针是变量,可以被赋值,数组名不是变量,不可以被赋值。
③指针作为地址可以参加一些地址运算,如加法、减法,在特定的环境下(如两指针指向同一数组中的元素)还可进行比较运算,但不同的数组名之间则一般不进行比较运算。
④运算速度上的差异。一般来说,用指针要快些,因为在实际的运算中,总是把数组下标表示通过存储映象函数转换为指针表示,按其地址访问内存,这种转换要进行乘法和加法的运算。
⑤数组具有较好的可读性,指针具有更强的灵活性。一般,对某些多维数组中非连续的元素的随机访问用下标表示比较方便,当按递增(减)顺序访问数组时,使用指针快捷而且方便。
(二)指针与一维数组