关于指针

指针是什么?

    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)的简便写法,下标运算[]原本就是这种用法,它和数组无关。对于编译器,[]这样的运算完全可以不存在。

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

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值