欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

c语言中*用于指针,关于C语言中指针的理解

发布时间:2023/12/15 41 豆豆
生活随笔 收集整理的这篇文章主要介绍了 c语言中*用于指针,关于C语言中指针的理解 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

关于c语言中指针的一些理解

这几天在看任哲老师编写的嵌入式实时操作系统uC/OS原理与应用一书,第二章讲到指针的用法,我发现自己有些地方有疑问,就重新看了关于c指针的知识。同时也对指针有了一定的理解。

在理解指针的时候我们一定要将他跟内存地址联系起来,这也是c语言跟c++的区别,c语言可以更接近硬件底层。对于指针我们可以理解为其是一个存放内存地址的变量。*跟&,*是声明一个指针变量,而&是创建一个引用。

我们现在定义一组声明:

int  a=112,b=-1;

float  c=3.14;

int  *d=&a;

float  *e=&c;

对于以上的声明,我们可以用如图这种方式来表达,每一个小格代表一个内存地址,我们这里定义两个字节为一个字。100,102,104,106,108这五个整数为地址,我们定义a,b,c,d,e为其地址名字,这样我们可以通过名字访问内存地址而不是具体的数字。这些变量名也让我们更加方便的去访问内存地址。

在这些声明中,变量a,b用于存储整型变量,而c用于存储浮点型变量,d和e里边存的是a跟b的地址而不是内容(这点需要我们牢记)d的地址是106内容是100(也就是a的地址)。我们不能理解为变量d和e的值就是112跟3.14。d和e被声明为指针并不能改变这些表达式的求值方式。也就是说指针型变量有两点不同于整型变量,一是他对应地址存的内容,二是他的求值方式,不会因为他是指针型变量就将其内容改变为所指变量里的内容。如果你简单的理解为他是指针,所以可以自动的获得存储于位置100和104的值,那么你就错了。变量的值就是分配给该内存位置所储存的数值,即使是指针也不例外,只是不同的是他们求值方式会不同。

通过一个指针访问他所指向的地址的过程称为间接访问。用于执行间接访问的操作符是单目操作符*。

对于上图所示d的值为100,。当我们使用了间接访问操作符时,他表示访问内存位置100并查看那里的值,因此*d的右值为112——位置100的内容,他的左值是位置100本身。间接访问操作符需要的是个右值,但这个操作符所产生的结果是个左值。指针变量之所以可以作为左值,不是因为他们是指针,而是因为他们是变量。对指针变量进行间接访问表示我们应该访问指针所指向的位置。

我们来看一个表达式:

*&a=25,

这个表达式的意思是将25赋值给a。我们来分析这个表达式。&a表示取a的地址。他是一个指针常量(使用这个指针常量并不需要知道的实际值,因为a我们已经定义了此内存地址的名字。*操作符访问其操作数所表示的地址。在这个表达式中*的操作数是a的地址,所以25直接存于a所对应的那个内存空间中。

我们接下来看指针的指针

int  a=12;

int  *b=&a;

c=&b;

c我们定义的是一个指针,这个指针是指向b这个指针的指针,而它所指向的那个指针是一个指向整形的指针。

1.int *p;

2.int **p;

3.int *p[10];

4.int (*p)[10];

5.int *p(int);

6.int (*p)(int);

7.int (*p[10])(int);

对于上述的7条分别是:

1.指向整型的指针

2.指向指针的指针,而他所指向的指针是一个指向整型变量的指针

3.一个有10个指针的数组,这十个指针分别指向十个整型变量

4.一个指针,指向有十个整型数据的指针

5.一个函数(不是函数指针),函数有一个整型参数,返回值是一个指向整型的指针

6.函数指针,该函数有一个整形参数,返回值是一个整型类型

7.一个有十个指针的数组,该数组中的指针指向一个函数,该函数有一个整型参数并返回一个整型数

总结

以上是生活随笔为你收集整理的c语言中*用于指针,关于C语言中指针的理解的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。