问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言指针的概念,它例子具体点

发布网友 发布时间:2022-04-28 23:09

我来回答

4个回答

热心网友 时间:2022-06-25 00:09

要明白指针的概念,首先得明白程序中的变量在内存地址空间中如何存放。
内存地址空间以字节为单位,包括程序的代码段、数据段、堆还有栈。
一个变量有两个属性:变量类型和变量名。通过变量名我们可以找到该变量的第一个字节在地址空间内存放的位置(即内存地址);通过变量属性(即变量类型)我们知道该变量总共占用几个字节,这样每次访问它就知道取多少个字节,例如int型变量一般32位,即占用4个字节。
一个变量在定义之后,程序会给它分配内存,这个内存地址是不会变的,直到这个变量过期。
这样,除了通过变量名来访问该变量之外,如果我们知道了该变量在内存中存放的位置,那应该就能直接对该变量进行读写。如果能这样做,在某些情况下还是有很大便利性的。C语言如何实现该功能?指针。
用指针来指向变量,(即通过指针来访问变量),其实就是直接访问该变量的内存地址。为了安全起见,一个指针的类型必须与该指针指向的变量类型相对应,因为在用指针来取代变量名进行各种操作时,编译器会首先判断该操作是否合法。指针也必须能包含变量的这两个属性,不然怎么访问该变量。指针保存的值就是它指向的变量在内存中的起始位置;指针的类型表明该指针指向的是什么类型的变量。
例如,int * pi = &a;
pi指向int型变量a,这样pi的值就是a的起始内存地址,pi是int*型指针。
这样通过解引用操作符*就可以通过*pi来访问a的值(访问a的内存地址来获得a的值),在需要使用a的时候,我们可以用*p来取代,例如:
*p = 1 + 2; // a = 1 + 2;
m = *p * 3; m = a * 3;
一般,初学者对C指针的困惑有两个地方:一个是多重指针,另外一个是强制类型转换。
多重指针,即指向指针的指针,例如 int ** ppi。指针也是变量,指向指针的指针无非就是它指向的类型是指针,例如,这里ppi是一个指针,它指向的变量类型是int*型指针。对ppi解一次引用可以访问该int*指针变量,对该int*变量再解一次饮用可以访问该指针指向的int型变量,即**ppi。
强制类型转换,例如,char * pc = (char *)pi;通过*pc访问的是*pi的第一个字节。
其实只要记住一点就行了,指针有两个属性,它保存的内存地址和它指向的变量类型。通过强制类型转换,其实转换的是编译器对该指针所指向的变量类型的转换。例如,本来pi指向的是一个4字节内存,通过强制转换,pc指向的就是一个1字节内存,内存起始地址没变,变的只是每次访问该内存所访问的字节数。
例如,有一个常见的例子,如何判断机器的内存模型是大端还是小端?(一个多字节变量存放在内存中时低地址处存放的是高字节还是低字节,前者是大端,后者是小端)
int a = 0x01;//声明一个4字节int型变量,高字节是0,低字节是1
char* pc = &a;//声明一个指向char的指针,这样通过pc访问的内存是一个字节,即通过pc可以访问到a占用的第一个字节(低地址处),通过*pc的值即可判断是大端还是小端
if (*pc == 1) printf("小端");
else printf("大端");

热心网友 时间:2022-06-25 00:10

指针这个词汇实际上是个,形象的比喻——
比喻一个箭头,指向内存中的某个数据块——
事实上现代计算机系统中确实存在这样的数据块,但不存在这样的任意箭头!

指针确切的语义是地址。是一个数据类型,跟int是一个数据类型一样。
是类型,就可以实例化。比如,int的实例是整数,指针的实例是地址。如此而已~

热心网友 时间:2022-06-25 00:10

指针 就是地址,对应着内存中的地址,
就好比北京市是内存条,"长安街100号"就是地址,也就是指针,他的内容是一个房子。
int* pointer = 0; 声明了一个指针,就是声明了长安街100号,但是这是他只是纯粹意义的一个符号,因为他不指向任何实际的内容
pointer = malloc(1); //pointer指向了内存中的一块内存,就好比给长安街100号这个符号给上了意义,现在它就代表在东经XXX北纬XXX的一个具体的位置。
*pointer 就是查看pointer具体指向的内容,就代表东经XXX北纬XXX
总的来说,指针就是地址,他指向内存中的具体的一个位置

热心网友 时间:2022-06-25 00:11

比方说一个普通的long类型值:0x00400300,把它看成一个普通数他就是0x00400300,可是把它看成指针那么就表明你注重的是0x00400300这个地址存储的值。我们都知道每个数据在进程当中都是要有地址去存储它的,就好比水要有瓶子来装 一样。这里,我们把0x00400300当做是瓶子,我们要关注的是瓶子里的水。所以就有指针这个概念。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
生产要素的需求有哪些性质 生产要素的需求有何特点? 什么是生产要素需求 微观经济学要素需求什么是条件要素需求?它和要素需求有什么不同?_百度... 养宠物的人遵守规则,是不是就能和别人平安相处呢? 企业培训学到了什么 培训感悟简短 有关培训的感悟 通过培训学到什么 培训你学到了什么 领导问培训学到什么怎么回复 帮忙想一个体育器材公司的名字 3Q 3Q 紧急 关于C语言指针的简单的例子 体育运动公司起名字,名字最好能体现运动积极向上的精神,也能有一定的... 想起一个关于体育培训的公司名字,可以培养运动员,为大学输送人才这样的一个培训的公司。名字要大气。 给公司起名字,一个体育教育的公司,希望大家多多给点意见,新颖创新有活 ... 体育公司起名字以动字结尾的有哪些? 给体育用品公司取名字~ 赵丽颖宣布离婚冲上微博热搜,3小时后阅读量超14.8亿,对此你怎么看? 缺铁性贫血吃什么补铁最快? 吃什么补铁效果最好 小学语文摘抄好词好句100句,高分悬赏(网站要好的,但不一定是网)。 想要补铁选择吃什么食物好 谁能告诉我360和qq大战的*和大是大非? 现在要知道到个*咋就那么难呢? 我女友网名叫夜夜,她群里的人整天都说日日夜夜日夜夜。。。这 巨蟹座相关资料!!!不要网站!!!加送分!!! 我想买一件买成人用品,夜夜春商城里的东西是不是真的 2010年1月12日为什么百度网页打不开 2010年9月30日0点腾讯所有的网页都打不开? 现在是5月30日19:04 为毛腾讯的所有网站都打不开 被黑了么? 信用卡欠了钱有利息了,那么我把本金还了,剩下的利息还会涨利息吗 您好我想起一个体育有限公司的名字麻烦您帮忙起一个? c语言关于指针的例题 请教各位朋友:体育培训类的公司起什么名字好? 替体育公司取名字 c语言,指针函数的应用,能举个简单点的例子吗?越简单越好啊 体育公司起名!通俗易懂!不失体育科技和全民健身宗旨 c语言的两个指针例子??? 公司起名,请帮我起个体育公司名谢谢 c语言,指针函数的程序,能举个简单点的例子吗?越简单越好啊 C语言关于指针的一个简单的例子,请教 给体育公司起名起什么名字好 C语言指针分析 四个字的体育公司名,体育用品公司起名,请神来帮忙啊!!! C语言中的指针表达式,请大家根据图详细讲下,谢谢 我想注册一个关于定向运动体育相关的公司,谁能帮忙想出一个比较大气的名字呢? C语言的指针,又什么用?能用通俗的话讲讲什么是指针吗?最好结合例子 体育培训公司起名大征集!! 体育方面的公司起什么名字好?三个字或者四个字。 体育公司起名 C语言求教 关于指针的一个简单的例子