C语言中的指针

Python017

C语言中的指针,第1张

先给你解释一下指针变量和指针,还有指针变量指向的变量的分别意思。

指针变量的值是指针,指针就是地址;指针变量指向的变量就不是地址了,而是一个具体的变量。

看一个很简单的程序段:

main()

{

int

a=5,*p=&a

printf("%d",*p)}

在这里,定义了指针变量p,指针变量p又被赋予了a的地址,此时a的地址就是指针变量p的值;而*p就是指针变量指向的变量,此处是整型变量,由于p被赋予的是a的地址,所以说这个变量就是a,即*p=a.接着因为a被赋予了5,也就是*p就是为5.

这样你就可以理解*n=0是什么意思了,也就是n是一个指针变量,这个指针变量指向的变量是一个整型变量,*n就是一个整型变量,*n这个整型变量被赋值为0;

然后是你的第二个问题:*n++,因为*和++是同优先级,并且是自右向左运算(你查下书的附录可知),所以说,相当于*(n++),意思是取了*n这个值之后,再n++,即往下一个地址去,然后接着取这个地址的值;再n++....一直往下取。

而(*n)++呢,就是先取了*n这个值之后,然后再把*n这个值自增1.

如果不明白,建议多看几遍书哦!

楼主这么写不对,c中的函数参数传递是值传递。你把那个指针的值传过去,在函数中改变了形参的值但是无法改变实参的值,如果想改变实参的值要传递实参的地址,那么你的函数形参就要改成二级指针,即函数应为func(int **p2) 你主函数的参数p是一个没有初始化的指针变量,自然不对。地址值较大,你又用%d输出当然是负值了。