欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于指针 博客分类: C\C++  

程序员文章站 2024-03-11 12:42:55
...

指针是什么?

    K&R中关于指针一词做如下解释:

         指针是一种保存变量地址的变量,在C中频繁地使用。

这种解释直接有把指针当做变量的意思,但是事实并非如此。

 

    经常说的指针实际上是指“指针类型”、“指针类型变量”、“指针类型的值”。

    像int a=5;一样,有“int类型”、“int类型变量”(a)、“int类型的值”(5)。

    “指针类型”是由其他类型派生的,也就是说,它包含“指向int的指针类型”、“指向double的指针类型”;

    “指针类型的值”在程序中实际上就是内存的地址。

#include <stdio.h>

int main()
{
	int hoge=5;
	int piyo=10;
	int *pHoge;

	/*输出每个变量的地址*/
	printf("&hoge...%p\n",&hoge);
	printf("&piyo...%p\n",&piyo);
	printf("&pHoge...%p\n",&pHoge);

	pHoge=&hoge;  //hoge的地址赋给pHoge
	printf("pHoge...%p\n",pHoge);
	printf("*pHoge...%d\n",*pHoge);
	*pHoge=10;  //通过pHoge修改hoge
	printf("hoge...%d\n",hoge);
}

 代码中,pHoge是指向int的指针变量,它取值为&hoge,&hoge是hoge的地址,也就是指针类型的值。

“*pHoge”表示指向该地址的变量,而hoge变量指向了这个地址,所以*pHoge等同于hoge。

 

指向int的指针类型与指向double的指针类型有区别吗?有,因为编译器会记住指针所指向的类型,这两张类型相互赋值时都会受到编译器的警告。在指针进行加N时,指针的值(内存地址)会增加“N*所指向类型的长度”。

 

空指针NULL是特殊的指针类型的值,它确保指针没有指向任何对象。NULL可以对任何类型的指针变量赋值。在 stdio.h里面定义为:#define NULL 0

另外,空字符'\0'实际上也是值为0的字符。

 

数组可以解读为指向它的初始元素的指针,p[i]是*(p+i)的简便写法,下标运算[]原本就是这种用法,它和数组无关。对于编译器,[]这样的运算完全可以不存在。

数组作为参数进行函数参数传递时,传递的是初始元素的指针。