C语言指针理解patr1

今天在看《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来指向新引用,当方法为指针返回一个新引用时才有意义。

时间: 2024-07-28 20:03:00

C语言指针理解patr1的相关文章

C语言指针理解,记下来以后看

指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址. 要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的 类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区.让我们分别说明.  先声明几个指针放着做例子:  例一:  (1)int*ptr;  (2)char*ptr;  (3)int**ptr;  (4)int(*ptr)[3];  (5)int*(*ptr)[4];    指针的类型  从语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的部

&quot;深入理解C语言&quot; 指针

本文对coolshell中的"深入理解C语言"这篇文章中提到的指针问题, 进行简要的分析. #include <stdio.h> int main(void){ int a[5]; printf("%x\n", a); printf("%x\n", a + 1); printf("%x\n", &a); printf("%x\n", &a + 1); return 0; } 假设

C语言指针

C语言指针 指针是什么? 指针也是一个变量,但是这个变量存储的是一个地址,指向一个存储单元.我们可以根据指针(地址)找到他所指的变量,并对这个变量进行操作(赋值等).通过C里面的取地址符号&和取所指内容的符号*可以很方便的表示指针以及指针所指的变量之间的关系 /* ============================================================================ Name C语言指针 : text.c Author : Version : C

C语言指针讲解

指针是C语言的一种数据类型,类似于C中的其他类型,例如int ,char 等.既然指针是一种类型,当我们定义该类型变量,该类型变量就称为指针变量. C中有了指针就有了指向.指向:指针变量指向本身保存的内容(地址或指针)所表示的内存单元. C语言指针是一个特殊的变量,其里面储存的数值被解释成为内存里的一个地址. 在计算机中,所有对数据的操作,都是通过其地址进行的,指针让程序的效率更高,代码更少. 在学习指针的时间,一定要理解并区分指针的四个感念:指针的类型,指针所指向的类型,指针的值,指针本身所占

[转]C 语言指针的使用

第一章 指针的概念 指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址. 要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的 类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区.让 我们分别说明. 先声明几个指针放着做例子: 例一: (1)int *ptr; (2)char *ptr; (3)int **ptr; (4)int (*ptr)[3]; (5)int *(*ptr)[4]; 如果看不懂后几个例子的话,请参阅我前段时间贴出的文?lt;<如何

C语言指针的陷阱

C语言指针的陷阱   分类: C/Cpp 转自:http://blog.csdn.net/porscheyin/article/details/3461670 "C语言诡异离奇,陷阱重重,却获得了巨大成功!"--C语言之父Dennis M.Ritchie.Ritchie大师的这句话体现了C语言的灵活性以及广泛的使用,但也揭示了C是一种在应用时要时刻注意自己行为的语言.C的设计哲学还是那句话:使用C的程序员应该知道自己在干什么.有时用C写的程序会出一些莫名其妙的错误,看似根源难寻,但仔细

[c++]this指针理解

#include <iostream> using namespace std; /** * this 指针理解 */ class A{ int i; public: void hello(){ cout<<"Hello"<<endl; } }; int main(){ A *p=NULL; p->hello(); } 由于单独开发基于c++的编译器,c++程序翻译成c程序后在,在使用c语言的编译器进行编译. p->hello(); 翻译

c语言指针学习

前言 近期俄罗斯的陨石.四月的血月.五月北京的飞雪以及天朝各种血腥和混乱,给人一种不详的预感.佛祖说的末法时期,五浊恶世 ,十恶之世,人再无心法约束,道德沦丧,和现在正好吻合.尤其是在天朝,空气,水,食品,你能告诉还有没有问题的吗?不知大难至,世人依旧忙.祸福相依,危中有机.那些高级生命,出于慈悲,会救渡我们,但是你要去思考,去发现机缘. 最近较闲,没事就学点基础知识,整天在上层晃,感觉晕的厉害,接地气.关于指针我上学的时候学过一点,我的老师说"指针很难呢",当时以为这老师挺谦虚的.后

C语言指针,你还觉得难吗?

在研究式学习-c语言程序设计指针式这样介绍的: 内存中存储变量的第一个单元的地址 称为指针,存放指针的变量称为指针变量: 变量的访问方式有: 直接访问方式:按变量名查找其首地址 间接访问方式:通过指针访问 int swap(int p,int q){ int temp; temp=p; p=q; q=temp;} 现在理解了这个函数为什么要用指针了: 因为C语言中实参变量和形参变量之间的数据传递是单向的值传递方式,虽然运用指针被调函数不能改变实参指针变量的值,但可以改变实参指针变量指向的变量的值