指针是什么?
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)的简便写法,下标运算[]原本就是这种用法,它和数组无关。对于编译器,[]这样的运算完全可以不存在。
数组作为参数进行函数参数传递时,传递的是初始元素的指针。
相关推荐
学习指针要从基础开始,最好有几个完整的正确的程序作为指导
关于指针递增的操作,描述指针和引用的区别,通过代码看出指针的优势和地址变量的使用
这个资料是关于指针的讲解,有助于不理解指针的学生的学习。
关于指针的一些总结,关于指针的一些总结,欢迎下载,谢谢
关于指针的理解---从空间看 关于指针的理解---从空间看
关于指针的使用,比较晕指针的可以看看,让你从此不再害怕指针
C++中关于指针入门的最好的文章C++中关于指针入门的最好的文章C++中关于指针入门的最好的文章
C语言中关于指针部分的详细总结
如果一个程序员不懂指针,他肯定算不得一名合格的程序员。指针是C语言的精华,每一个学习C语言的人都应该好好学习基础语法,并尝试着啃一啃指针这块硬...这是高手的一份很好的关于指针的经验之谈,希望对大家有帮助。
关于指针的内容 平常容易弄混找工作很有用
这是个人整理的关于指针和类型转换的资料合集
个人收集的关于指针方面的资料,觉得还可以,希望对他们有用
关于以语言的,大家看了会懂一些的,我相信会的
C语言中关于指针的几个重要表达式.pdf
指针一直是C++学习中的一个难点,本文象形的介绍了指针的用法,并以实例说明。
通过数组指针进行矩阵运算,以一个实例使读者对指针数组有了进 一步的认识, 进而更加深了对数组指针与指针数组的理解
学习c++的指针的入门资料,指针作为c++的核心,是学习C++的重点,主要为初学者介绍指针部分
这是初学者可以参考的c++资料,里面介绍了关于指针的各种知识,包括指针的基础,指针与数组,指针与字符串,指针与函数,引用等。
指针的原理和指针传递函数以及指针应用实例
非常清楚的讲解的指针在各方面的应用,用简单的例子告诉你要注意的细节。