关于指针 博客分类: 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)的简便写法,下标运算[]原本就是这种用法,它和数组无关。对于编译器,[]这样的运算完全可以不存在。
数组作为参数进行函数参数传递时,传递的是初始元素的指针。
推荐阅读
-
关于指针 博客分类: C\C++
-
C是怎样使用内存的 博客分类: C\C++
-
javaer学c++: namespace命名空间 博客分类: c++ namespacec++
-
[Unity] 第49讲 关于时间函数的一些介绍 博客分类: Unity系列
-
[Unity] 关于性能的几点说明 博客分类: Unity系列
-
[Unity] 第49讲 关于时间函数的一些介绍 博客分类: Unity系列
-
c++ 11 你应该了解! 博客分类: C++ c++
-
[Unity] 关于physics的一些说明 博客分类: Unity系列
-
c++ 11 你应该了解! 博客分类: C++ c++
-
StringUtil包函数 博客分类: JAVA CC++C#