c语言指针深解小樽的java

关于C语言的指针,相信有很多人都已经明白了它是什么意思,但是也有很多人处在迷茫之中,我们一起来看看吧

指针就是其值为内存地址的变量---------直观的理解,可以参考

变量是直接引用变量的值,而指针是间接(通过值的地址)来引用变量的值------只管理解,可以参考

指针可以被初始化为0,null,或一个地址值

也许通过实验能更加深理解:

intmain(){inta;int*p;

//现在我们初始化a

a=47;p=a;

printf("%d\n",p);}

vs2008:

------已启动生成:项目:CFile,配置:DebugWin32------正在编译...hello.ce:\code\net\c语言\hello.c(11):warningC4047:“=”:“int*”与“int”的间接级别不同正在链接...正在嵌入清单...生成日志保存在“file://e:\Code\NET\C语言\CFile\CFile\Debug\BuildLog.htm”CFile-0个错误,1个警告==========生成:成功1个,失败0个,最新0个,跳过0个==========

输出47

---------------------------------------------------------------------------------------------------------------

其实指针变量也是变量,你可以对它赋值,这没有什么好奇怪的!

#include

intc;

a=47;p=a;c=&a;

printf("%d\n",p);printf("%p\n",c);

}

------已启动生成:项目:CFile,配置:DebugWin32------正在编译...hello.ce:\code\net\c语言\hello.c(13):warningC4047:“=”:“int*”与“int”的间接级别不同e:\code\net\c语言\hello.c(14):warningC4047:“=”:“int”与“int*”的间接级别不同正在链接...正在嵌入清单...生成日志保存在“file://e:\Code\NET\C语言\CFile\CFile\Debug\BuildLog.htm”CFile-0个错误,2个警告==========生成:成功1个,失败0个,最新0个,跳过0个==========输出:

470012FF60请按任意键继续...

--------------------------------------------------------------------------------------------------------------------------------

其中%p是格式化输出标记,他说了:“用系统实现时所定义的方式(这个系统是以哪种方式来显示指针,这里很显然是十六进制的)显示一个指针的值”

呵呵,可我们显示的是c,仅仅是一个普通的int类型,它的值是一个地址!!他以16进制的方式显示了这个地址(a的地址)的值。

printf("%d\n",p);printf("%p\n",c);printf("%p\n",a);}

------已启动生成:项目:CFile,配置:DebugWin32------正在编译...hello.ce:\code\net\c语言\hello.c(13):warningC4047:“=”:“int*”与“int”的间接级别不同e:\code\net\c语言\hello.c(14):warningC4047:“=”:“int”与“int*”的间接级别不同正在链接...正在嵌入清单...生成日志保存在“file://e:\Code\NET\C语言\CFile\CFile\Debug\BuildLog.htm”CFile-0个错误,2个警告==========生成:成功1个,失败0个,最新0个,跳过0个==========

输出:

47

0012FF60

0000002F

呵呵,看清楚了吧,%p不是跟指针绑定的,他只是说:“以这个系统显示指针的方式来显示这个数!”,他有什么别的权利!

printf("%d\n",p);printf("%p\n",c);printf("%p\n",a);printf("%p\n",&c);}

0012FF48

很简单,最后一行输出的是c的地址的值(我们知道了p在这个系统中就是以十六进制来显示的,所以我们用p来格式化输出),c本身的值也是一个地址(是a的地址),但是你应该知道什么是什么!

到了这里你还没有看到指针到底有什么特别之处,你所看到的指针变量的功能和普通的变量似乎没有什么区别,正象第一行输出那样,他被赋予了一个整数值然后就被输出了!!

我们需要时刻记住,一个指针变量是用来存储地址的,但是整数值也可以表示地址,所以我们将一个整数值赋予一个指针变量也没有什么不妥的地方,这就同将一个地址的整数值赋予他是一样的。也许你有兴趣看一下地址为47的这个内存单元中存储的内容,我们试试吧!

a=0x000019b0;p=a;c=&a;

printf("%d\n",p);printf("%p\n",c);printf("%p\n",a);printf("%p\n",&c);printf("%d\n",*p);}

这里可以通过编译,但是却不能运行,这是为什么呢(而我们所做的改动仅仅是最后一行的输出语句,也就是说问题出在输出语句上)??能通过编译,说明了编译器并不认为我们的改动有什么错误!!!但是为什么不能运行呢??

、#include

a=47;p=0x0012FF60;c=&a;

正常编译,正常运行

1245024

我们将a的地址赋予p,这个时候我们再*p就可以正确得到了输出值47!!

上一个例子我们不能执行呢?我们不知道内存的47单元是否有可用的值!!!!有吗?我们不知道!!!但是我们想知道,到底怎么办!!!

a=47;p=0x0012FF60;*p=99;c=&a;

printf("%d\n",p);printf("%p\n",c);printf("%p\n",a);printf("%p\n",&c);printf("%d\n",*p);printf("%d\n",a);}

------已启动生成:项目:CFile,配置:DebugWin32------正在编译...hello.ce:\code\net\c语言\hello.c(13):warningC4047:“=”:“int*”与“int”的间接级别不同e:\code\net\c语言\hello.c(15):warningC4047:“=”:“int”与“int*”的间接级别不同正在链接...正在嵌入清单...生成日志保存在“file://e:\Code\NET\C语言\CFile\CFile\Debug\BuildLog.htm”CFile-0个错误,2个警告==========生成:成功1个,失败0个,最新0个,跳过0个==========

0000063

99

可见,我们通过指针改变了变量a的地址单元的值,哈哈,你也许认为我们能通过这样的方式来改变其他地址的值!!这样的想法对吗????

a=47;p=0x0012FF58;*p=99;c=&a;

printf("%x\n",p);printf("%p\n",c);printf("%p\n",a);printf("%p\n",&c);printf("%d\n",*p);printf("%d\n",a);}

正常编译可以运行:

12ff58

惊呼吧,似乎发现了新大陆,可是我们把0x0012FF58改成0x0012FF59你会看到不能运行,你会发现系统提示你a的地盘被入侵了!!!!呵呵!!!改成其他值似乎也不能解决不能运行的现象。

栈是个好东西,你不能破坏他的规矩,你要按照规矩来,你不能做超出规矩的动作!!

你必须遵循内存中栈的规则,否则你将破坏内存的分配机制,进而做出不安全的操作!!这是一中保护措施!!这里间隔2的地址是可以赋值的!!但是要记住一定得不侵犯别人的东西!!

所以呢,你如果要通过这样的方式来改变内存中的值,你必须对内存的状况透彻地了解,可是似乎我们没有这么大的能力吧!!

所以通过变量来实现这样的动作更理智和现实!!

所以呢,你可以看到指针的作用:你就是用她来保存一个变量的地址!!然后呢,你可以直接来得到那个变量的地址!!然后呢,你可以通过*P的形式,来访问或者修改这个变量的值!!而普通的变量,你就不能在之前面加上*来访问这个变量的值所代表的内存单元的值,这个是指针变量的专利产品!!

通过深入学习这些知识点,你将能够熟练地运用C语言指针进行高效的编程,解决复杂的算法问题,并构建自己的数据结构。提供的《C和指针》PDF文档将为你提供详细的解释和实例,加深对这些概念的理解。

-通过《C语言指针大全.doc》和《MethodPointer.png》中的实例,可以进一步理解和应用上述概念,解决实际编程问题。在学习和使用C语言指针时,务必重视实践,通过编写代码加深理解。同时,理解指针的底层工作原理...

在本项目"C语言指针式时钟设计"中,我们将探讨如何利用C语言的基本特性,尤其是指针,来实现一个动态的、实时更新的指针式时钟。这个时钟模拟了真实世界中的钟表,包括时针、分针和秒针的运动,通过在控制台或图形...

以下是关于C语言指针的详细知识点。首先,要理解指针的概念,我们得先了解变量在内存中的存储实质。计算机的内存是一个用来存储数据的线性空间,它由一系列的字节组成,每个字节都有一个唯一的地址标识,这个地址...

使用场景及目标:①掌握C语言指针的基础概念和使用方法;②学习指针的各种高级应用技巧;③了解指针在实际开发中的重要性和常见问题。阅读建议:本文内容较为全面,建议仔细阅读每一部分,结合实际编程练习加深...

3.**解引用操作**:`*`运算符用于访问指针所指向的值,如`inty=*p;`会将`p`指向的值赋给`y`。4.**函数参数传递**:C语言中,函数参数传递可以使用指针,实现按址传递,修改函数内部的局部变量,或者直接操作...

在"C语言指针资料集"中,可能包含了这些知识点的详细讲解,包括实例代码、练习题和解答,帮助读者逐步提升对C语言指针的理解和应用能力。无论是初学者还是有一定经验的程序员,都能从中受益,加深对这一核心概念的...

【C语言指针教学】C语言中的指针是其核心特性之一,也是让许多初学者感到困惑的概念。指针能够直接存储内存地址,允许我们直接访问和修改内存中的数据,从而实现高效的数据操作和复杂的程序设计。理解并熟练掌握...

本压缩包"指针学习.rar"包含了C语言指针学习的入门基础代码和相应的网页说明,旨在帮助初学者理解和掌握这一关键概念。1.**指针的基本概念**-指针是一个变量,其存储的是另一个变量的内存地址。-指针类型与...

###C语言指针详解####一、变量与内存在深入了解指针之前,首先要明确变量与内存的关系。变量是程序设计中最基本的数据存储单元之一,它在内存中占有一定的空间。例如:-`inti;`在内存中申请了用于存储...

###C语言指针详解####一、引言C语言是一种广泛使用的程序设计语言,以其高效性、灵活性和强大的底层控制能力而著称。在C语言中,指针是一个非常重要的概念,它允许程序员直接操作内存地址,从而实现对内存的...

3.**解引用操作**:使用`*`符号可以访问指针所指向的内存单元的值,如`printf("%d",*p);`会打印出`x`的值。4.**指针运算**:指针可以进行加减运算,但这些运算不是简单的数值相加减,而是移动到内存的下一个或...

中级篇则在基础上进一步深入,介绍指针这一C语言的核心概念,如何利用指针进行动态内存管理、数据结构操作,以及更复杂的函数用法,如递归和回调。此外,还将涵盖文件操作、预处理器、位运算等高级主题,帮助读者...

###C语言指针的详细用法在C语言中,指针是一种非常强大的特性,它允许程序员直接控制和操作内存地址。本文将详细介绍C语言中指针的各种用法及其应用场景,帮助读者更好地理解和掌握指针。####指针基础在开始...

本文将深入探讨C语言指针的教学方法,旨在帮助学习者更好地理解和掌握这一概念。首先,理解指针的本质至关重要。指针是一个变量,它存储的是另一个变量的内存地址。在内存模型中,每个变量都有一个唯一的地址,这...

本文将深入探讨C语言指针的教学问题,旨在为教师和自学者提供有效的学习策略。首先,理解指针的基本概念至关重要。指针是一个变量,它存储的是另一个变量的内存地址。在C语言中,我们可以通过取地址运算符`&`获取...

THE END
1.c这个指针运算*p+=5是什么意思?{代码...}https://segmentfault.com/q/1010000009137536/a-1020000009172336
2.pointer是什么意思,pointer怎么读,pointer翻译为:建议;线索;教鞭...pointer是什么意思,pointer怎么读语音: 英音[?pnt?(r)] 美音[?pnt?] pointer 基本解释 n.建议;线索;教鞭;(测量仪器上的)指针 pointer 记忆方法 pointer相关的词根或词缀是:pointpunct pointer指针;指示者n. point 点;变尖 + er 表人或物 → 尖的东西 → 指针 ...https://fy.tingclass.net/w/pointer
1.指针的深度理解(1)wx671221645ca43的技术博客首先我们要先理解指针的概念,我们都知道CPU处理数据时,需要的数据是从内存中读取的,内存有8GB 16GB 32GB等,那么我们要知道GB是一个大的单位,但内存也分为一个个内存单元,每个内存单元取一个字(byte),一个字节又等于8个比特位(bit),一个比特位可以储存2进制的0或1,计算机中内存单元都有一个编号,C语言中把这...https://blog.51cto.com/u_17077955/12686712
2.主机记录是什么意思什么是主机记录和指针记录?什么是主机记录和指针记录?就是用来记录一个指针啊。假设有个原始指针*p,在后续操作过程中可能会改变p的话,则可以在最初定义*q=*p;无论怎么操作,都能通过*qhttps://www.ucloud.cn/yun/120359.html
3.空指针到底是什么意思?腾讯云开发者社区空指针 到底是什么意思? 各位,前段时间我们有推文介绍过野指针和悬空指针,那C中还有一个叫做空指针的名词,它究竟是指什么呢,今天就跟大伙聊聊这个空指针。 我们讲,每一种指针类型都有一个特殊值——“空指针”。它与同类型的其他所有指针值都不相同,它“保证与任何对象或函数的指针值都不相等”。也就是说,空...https://cloud.tencent.com/developer/article/1668519
4.汽车气压表2个指针是什么意思汽车气压表2个指针是什么意思 汽车气压表2个指针是分别是PSI(压强)、KG\u002FCM2(每公斤的压力)。以下是对汽车气压表的介绍: 气压表原理: 管体内部有一个校准杆,用于读取压力读数,使用方法校准杆位于活塞上部,但并不与活塞相连,而是与堵头相连。活塞向右移动时,便会推动校准杆。在释放压力时,活塞将向左移回,...https://www.yoojia.com/ask/6-11767977828616281898.html
5.HMI连接里面的区域指针具体表达的是什么意思SIMATICS7HMI连接里面的区域指针具体表达的是什么意思-HMI连接里面的区域指针具体表达的是什么意思https://www.ad.siemens.com.cn/service/answer/solve_289603_1077.html
6....变量定义时一定要初始化?2.指针变量初始化为NULL是什么意思...指针变量初始化为NULL什么意思1.为什么指针变量定义时一定要初始化?2.指针变量初始化为NULL是什么意思?https://www.zybang.com/question/722ef8a10a07c49f410a355339ab7368.html
7.3pointer是什么意思3pointer怎么翻译及发音用法例句沪江词库精选3-pointer是什么意思、英语单词推荐、中英文句子翻译、英语短语 三分球 相似短语 alternative pointer更替指针 data pointer数据指针 identifier pointer标识符指针,识别符指示字 Laser pointer激光笔 simple pointer单指针 auxiliary pointer【计】 辅助指示器, 附加指示器 ...https://www.hujiang.com/ciku/3-pointer/
8.电波表是什么意思ta跟普通表有什么特点和优点呢1、电波表什么意思 2、电波表的技术特点 手表是什么常用的物品,普通的手表主要以机械表为多,人们也比较多的佩戴。因为手表会有时间的误差,所以当我们普通的机械表出现时间误差时,往往需要我们自己手动的去解决这个问题。而电波表的发明则很好的解决了这个问题。下面我们将对电波表进行新的认识... ...https://news.wbiao.cn/zs/147731.html
9.*PS在c语言中是什么意思?在C语言中的意思是,PS是指针变量。https://www.3d66.com/answers/question_1370322.html
10.指针式万用表和数字式万用表上面的符号代表什么?具体怎么使用?测量方法与交流电压基本相似,转动开关至相应的交流电压档,并使指针有较大的偏转。如被测量电路中带有直流电压成份,可在“+”插座中串接一个0.1uf的隔直流电容器。 七、电容测量:首先将开关旋至被测电容容量大约范围的档位上(见附表),用0Ω调零电位器校准调零。被测电容接在表棒两端,表针摆动的最大指示值即为...https://www.swpu.edu.cn/eelab/info/1090/2254.htm
11.堆栈指针sp的作用是什么堆栈指针在什么情况下需要修改堆栈指针是CPU中用来管理程序运行时所使用的堆栈内存的寄存器。堆栈指针一般用SP(Stack Pointer)表示,在程序进行函数调用、中断处理等操作时,都需要使用堆栈来保存被调用函数或中断服务程序的状态,以便于之后返回到原程序继续执行。而堆栈指针就是用来指向当前堆栈顶部的指针,从而可以记录下函数或中断服务程序在堆栈中分配...https://www.eefocus.com/e/508871.html
12.C++指针使用方法解惑C++MFC在下列函数声明中,为什么要同时使用*和&符号?以及什么场合使用这种声明方式? void func1( MYCLASS *&pBuildingElement ); 论坛中经常有人问到这样的问题。本文试图通过一些实际的指针使用经验来解释这个问题。 仔细看一下这种声明方式,确实有点让人迷惑。在某种意义上,"*"和"&"是意思相对的两个东西,把它们放在...http://www.jzxx.wj.czedu.cn/html/article4420942.html