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语言中指针的理解的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 百万粉网红苏乞儿回应骑摩托上高速被拦 网
- 下一篇: c语言开发 .c .h,求助C语言大佬