c语言指针怎么理解,什么时候会用到指针,要注意哪些方面
发布网友
发布时间:2022-03-01 08:23
我来回答
共8个回答
热心网友
时间:2022-03-01 09:53
cpu自己有运算器和寄存器,通过总线与存储器件相连,在执行运算时,
需要将数据冲存储器件上面将参与运算的数据读入,运算完成后再送出到
存储区。那么cpu读入时需要访问存储器件的某个单元,需要指定这个单元
的编号,我们管这个编号叫存储地址。
比如:int a[10],*p; p=&a[3];a就是一个拥有10个整型数据的数据区
的首地址,变量p是存放地址的,称为指针型变量,赋值时需要取相应存储
区的地址,p=&a[3];就是取数组a的第4个单元的地址给p,那么p就拿到了
这个单元的地址,*p=5;就相当于a[3]=5;的操作,p++;后p指针就指向a[4]。
在操作大块数据时,一般记录首地址(数组指针),然后根据首地址再加
上偏移量来访问整个数据,在你程序中写a[3]时,计算机就会取a数组对应
的首地址再加3个整型偏移量来访问相应数据。用指针p访问a数组的好处
是,不用每次计算a加多少偏移访问数据,而是使p指向某数据后可以p++
或p--来访问前一个或后一个数据。
注意:
1.指针存放地址用,不是存储实际数据的,它是用来找数的,在
程序中要注意这点,往往出问题的是,指针还没有赋值就用来操作,或
用指针来存放数据,如:int *p=15,s[10]={ 0,15,{0} };的
p指针赋值有问题,这样计算机会把15当成地址存放到p变量中,以后用
*p访问得到的数据就不是你想要的数据了。(应该类似:p=s+1; *p=15;)
2.指针访问数据区一般需要程序来控制不要越界,比如定义了10个单元
的数据区,你不能让指针超出这10个单元的范围,否则得到的数据就是
不靠谱的。
3.指针的定义只是开设了可以访问数据区或数组的变量,数据区和数组
需要你的程序另行开设,然后把数据区或数组的某个单元的地址赋值给
指针变量,不要认定义了能访问数组的指针,数组就定义好了。
4.指针存放的地址最好不要用来与其他地址比较,除非你能确认地址比
较的结果肯定是你想要的。
5.举例来说,int a[10],*p=a;中a和p都是指针(地址),但a和p是不同的
在编译器眼中,a是一个数据区的首地址,是一个标记,你程序中使用a
时,编译器会知道用数据区的首地址来替换操作,而p是你自己程序开
设的变量,可以在程序中操作比如p++; p=a;等,但作为记号的a就不能
在程序中操作了,如a++; a=p;就是错的了。
6.子程序如果参数是指针型的,这个参数由子程序开设的指针型临时
变量存储,这个临时变量可以进行操作,但不会返回给调用者的指针型
变量。
如:int a[10],*p; int f(int *s) { s++; } main() { p=a; f(p); }
s再怎么加减都不会影响p。
热心网友
时间:2022-03-01 11:11
c语言指针就是内存地址。既然是内存地址当然可以用它来访问内存。所以当你要对内存进行读、写或分配、释放的时候会用到。甚至可以用函数指针来访问函数。要注意的东西一时说不全,这个需要自己实践总结。
热心网友
时间:2022-03-01 12:45
指针是按一定规律操作大量的变量时用的,你想象如果你有一个数组,你要操作数组中一个特定元素,但是这个元素的下标是个变量,那你就离指针不远了,实际上指针名就是一个真正的数组名,要想纯熟得理解和运用指针,最好看看数据结构的书
热心网友
时间:2022-03-01 14:37
个人理解
指针就是地址,不过这个地址是有类型的,比如一个int型的指针,int指的是该指针指向的那块内存存放的内容是一个int型的数据。
或者也可以把指针的类型简单的看作是这个指针所能管到的内存的大小,如一个int类型的指针可以管4个字节,char类型的可以管1个字节。
热心网友
时间:2022-03-01 16:45
就是数据的地址。 通过指针,可以向这个地址写入数据,或者读取数据。p是地址, *p就是地址的内容。追问那哪些地方会用到指针呢
追答变量或函数都是有地址的。所有用到地址的就有指针。数据指针,数组指针,动态分配的空间地址指针,函数指针,结构指针, 参数传递等等,可以说所有的地方都用到了指针。
热心网友
时间:2022-03-01 19:09
说实话吧,c语言的精髓就是指针,你的这个问题,没有谁能帮你解决,去看看书吧
推荐 《c和指针》讲解的挺详细,自学的难度是有点大,这是大一的课程,你呢?是、、、
热心网友
时间:2022-03-01 21:51
很多地方都可以用到指针,打个比方。就像我们去公共浴室洗澡,买票要给个有编号的钥匙,看到编号我们就知道要去找这个编号的衣柜,把衣物放在里面。洗完澡我们要拿着钥匙去找柜子拿衣服。
钥匙上保存了编号---------根据编号找到衣柜---------拿出衣柜里的衣服
指针-------------------------------地址-------------------------数据
要注意的是指针要用完释放,不然容易弄成野指针。还有指针指向的内容。
热心网友
时间:2022-03-02 00:49
指针可以理解为一张 写有变量或函数入口或结构体具体存放位置地址 的纸条,如果把内存比作一栋大楼,那么纸条上写得就是第几层楼第几号室。使用指针的意思就是自己根据纸条上地址,找到对应的房间,并对房间里面的东西取出来做出你需要的操作。
用到指针的情况很多,最常见的是被调用函数返回多个参数时会用到;制作各种链表会用到;访问结构体成员会用到;手动动态分配使用内存会用到;一些特定的结构体变量类型会用到(如 FILE)为提高程序执行效率也会特意使用指针(包含很多种情况,不再赘述);等等等等
要注意的地方也很多,很难说完,常见的就以下几种(我能想到的):
1.指针变量和普通变量概念使用方式相混淆
2.指针变量的赋值(初始化,传递地址)方式有误
3.指针变量的类型与所指元素的类型不一致
4.指针移动不恰当
5.指针在使用过程中发生了不必要的导致错误的改变
6.多重的指针指向指针,导致形成难以理清的逻辑关系
还有很多其他情况,在不同的使用环境下,指针会产生一些特定的要注意的问题;归根结底是C语言指针太灵活了,能做得事非常多,代价就是产生问题的原因也是很灵活的,一一列举几乎是不可能的。希望对你有所帮助