c中的指针的理解

来源:互联网 发布:李小璐分享淘宝店链接 编辑:程序博客网 时间:2024/05/16 18:52

很早就听说过 c的指针很难很难     所以抽空了解下。其实只要掌握了 概念,弄清楚他到底是干什么的?也不算太难。


既然指针是变量 那么他必然符合变量的几个特点         有名字 需要知道他叫什么 定义它来做什么用。 还有需要赋值把  没有值小心出错


嘎嘎 。再有 应该有类型吧 走什么风格的。开个玩笑 只要这个好理解 。

1:指针的名字与一般变量的规定相同,没有什么特殊的地方。

2: 指针的值就是某个变量的地址值。因此我们说指针用来存放变量地址值的变量。指针的值与一般变量的值是不同的,这是指针一个

特点。这就是说,指针式用来存放某个变量的地址值,当然被存放地址值的那个变量已经定义过的,并且被分配了确定的内存地址值。 一个指针存放了哪个变量的地址值,就说该指针指向那个变量。


3:指针的类型。指针的类型是该指针所指向的变量的类型。而不是指针本身的类型。因为指针本身是内存的地址值。其类型自然是int


型或者long型。而指针的类型是由它所指向的变量的类型决定的。由于指针可以指向任意类型的变量所以指针的类型也是很多的。int char float 数组 结构类型,联合类型 还可以指向函数或者文件等等


举个例子吧:

int a=5,*p;

这里说明了变量a是int类型的  并且付了初始值  。在定义语句中,*p表示p是一个指针,星号(*)是说明符,他说明后面的变量 是指针变量 并且指出他的类型是int指针意味着P所指向的变量是一个int型变量。


假定要将p指向变量a  由于指针是用来存放变量的地址值的,因此,要将变量a的地址赋值给指针P ,变量a的地址表示为&a  表示取其后面变量的地址


p=&a

则p是指向了变量a的指针。假定a配分配了内存地址是00001 p和a的关系如下图所示。

图中标明变量a的内存地址 是300H 。变量p的内存地址是305H。变量a的值为5,而指针的值为300H 可见变量p指向了a。翻译过来就是 指针p中存放了变量a的地址值。


c的指针定义一般如下:

1:一般变量指针定义的格式是       变量名前加&符号


2 数组的地址值可用数组名表示,数组名表示该数组的首元素的地址值。数值中的某个元素的地址值用&运算符加上数组元素名。

int a[10] ,*p1,*p2;

p1=a;

p2=&a[5];


这里*p1 和 *p2是指向int型变量的指针 p1=a 表示p1指向了a数组的首元素;p2=&[5]表示指针p2指向数组a的数组元素a【5】。

3函数的地址值使用该函数的名来表示,指向函数的指针可用它所指向的函数名来赋值。

关于&的用法需要注意的是它可以作用在一般变量名称前,数组元素名前,结构变量名前和结构成员名前 而不能作用在数组明前,也不能作用在表达式跟常量前。

那我们用简短的语句总结下:

对指针的理解:指针就是变量 比一般变量能特殊点。特殊在他是用来存放某个变量的地址的,它所存放那个变量的地址 就成为他指向了那个变量 也可以成为他是哪个变量的引用。指针的类型不是他本身的类型,而取决于 他指向变量的类型。简单说


指针的值是地址

指针的类型是它所指向变量的类型

原创粉丝点击