码迷,mamicode.com
首页 > 编程语言 > 详细

C语言指针理解patr1

时间:2015-12-05 19:15:08      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:

今天在看《Head First C语言》中,书中的代码是*lat=*lat+1;我则写成了*lat++;结果是并不能得到lat指针的内容加一。之后发现原来在C语言中*解指针运算符 与++后自增运算符的优先级是相同的,*p++,后自增运算符++只作用于p,并不能作用于*p(如果*的优先级更高的话才行)。

之后在调试中又发现了一个之前不了解的地方,在C语言中栈的存储是向低地址扩展,也就是先声明的变量在内存中反而内存地址是更大的。

 1 #include <stdio.h>
 2 void go_south_east(int* lat,int* lon){
 3         //*lat=*lat-1;//把传进来的指针参数解引用 
 4         //*lon=*lon+1;
 5         //*lat++;//在C语言中*解引用与++的优先级是相同的 从右向左结合 
 6         //*lon--;
 7         printf("%p\n",lat);//lat 是在栈中先声明 C语音栈的发展方向是向下 所以后面的变量在内存中的地址是变小的 
 8         lon++;
 9         printf("%p\n",lon);
10 }
11 int main(){
12     int mylat =10;
13     int mylon=10;
14     
15     printf("%p   %p\n",&mylat,&mylon);
16     go_south_east(&mylat,&mylon);
17     printf("%p   %p\n",&mylat,&mylon);
18     printf("我现在的位置位于%i经度 %i纬度",mylat,mylon);
19     
20     
21     return 0;
22 }
0022FEBC   0022FEB8
0022FEBC
0022FEBC
0022FEBC   0022FEB8
我现在的位置位于10经度 10纬度
--------------------------------
Process exited after 0.01538 seconds with return value 0
请按任意键继续. . .

由此可见 后声明的变量mylon在内存中的地址是小于mylat的,在方法中将mylon的地址加一,即得到mylat的内存地址。这里也显示了C语言与我之前看的C#书相同的一点,对于方法,传输给一个变量的指针,在方法类可以对指针的内容进行修改,修改可以保留到方法外,而如果对于指针本身进行修改(指向新地址),外面是不会显示改变的,因为传输的终归只是地址的复制。C#中可以对引用类型使用ref和out来指向新引用,当方法为指针返回一个新引用时才有意义。

C语言指针理解patr1

标签:

原文地址:http://www.cnblogs.com/plantprotecter/p/5021980.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!