【C语言】浅谈指针和一维数组的关系

1.用指针引用数组中各元素

        先定义一个一维数组a

        int a[5]={1,2,3,4,5};

        再定义一个指向该数组首元素的指针变量p

        int *p=a; // 也可以写为  int *p=&a[0];

        然后用for循环遍历数组并输出

        for (i=0;i<5;++i)//数组的元素个数作为循环变量

        {

                printf("%d",p[i]); // p[i] 等价于 *(p+i) 等价于 a[i] 等价于*(a+i)

        }

/*也可以写成下面的形式*/

        for ( ;p

        {

                printf("%d",*p); 

        }

        完整代码如下 

/*用指针访问数组*/
#include
int main()
{
	int a[5]={1,2,3,4,5};
	int *p=a;//等价于&a[0]
	int i;
	
	for (i=0;i<5;++i)//数组元素个数作为循环变量 
	{
		printf("%d ",*(p+i));//这里的 *(p+i)等价于 *(a+i)等价于a[i]等价于p[i] 
	}
	
/*上面的for循环也可写成下面这样*/

//	for (;p

 2.指针变量的自增和自减运算

        指针变量自增 p++ 或++p是让指针指向下一个元素的地址。同理,指针变量自减 p-- 或--p是让指针指向上一个元素的地址。

        指针运算符 “ * ” 和自增自减运算符 “ ++ ” “ -- ” 的优先级相同,且结合方向是自右向左,所以

*p++ 即为 *(p++) ,*++p 即为 *(++p)。在实际编程中,为了提高程序的可读性,往往要加上括号。

        注意:数组名a是首元素的地址,是个常量,所以不能进行自增自减运算。只有变量可以进行自增自减运算。

3.指针变量所占字节数

        在32位机中,不管是什么基类型,系统给指针变量分配的空间都是4字节。

        在64位机中,不管是什么基类型,系统给指针变量分配的空间都是8字节

        以64位机为例,64位机总共有64根地址总线,每根地址总线有0和1,或者说是高电压和低电压 这两种状态。内存单元中的每个地址都由这64根地址总线以不同的状态组合而成的。所以64位是8字节,指针变量占8字节,就正好能存储下所有内存单元里的地址。

你可能感兴趣的:(c语言,开发语言,后端)