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

C语言指针问题【精粹+附图】

发布网友 发布时间:2022-12-22 20:26

我来回答

3个回答

热心网友 时间:2023-12-20 18:34

我是这样看的,画一个内存的存储结构图就好了:

1.字符串”0ABCDEF“在内存中的存储格式,如下图所示,当调用fun函数时,语句*p=s,表示将s指向的内存地址赋给了指针p,此时指针p和s都指向了堆栈顶部的地址 0000 0001。

2.在判断while(*p!=0)中,具体是判断p指向的字符与数字0之间的比较,显然,只有当p指向"\0'时,这个while循环才会结束,此时p的地址为0000 0008,但是s的地址依然在0000 0001,具体如下图所示:

3.因此,当执行return时,p-s的值就是0000 0008 - 0000 0001,显然结果就是7了。


当然,具体的地址肯定不是如此,不过应该不影响理解的。

热心网友 时间:2023-12-20 18:35

#include<stdio.h>
int fun(char s[])
{
 char *p=s;
 while(*p!=0)    //这里的0 转换成char就是'\0',而不是'0'
  p++;
 return (p-s);
}
main()
{
 printf("%d\n",fun("0ABCDEF"));//深刻的理解一下这里的字符串,字符串中字母的值
}
//字符串实际是"0ABCDEF\0",最后\0的值才是0,第一个0是'0',是48

热心网友 时间:2023-12-20 18:35

*p!=0等价于*p!='\0',不等价于*p=='0',所以p指向s[]的第一个元素时并不结束循环
C语言指针问题【精粹+附图】

1.字符串”0ABCDEF“在内存中的存储格式,如下图所示,当调用fun函数时,语句*p=s,表示将s指向的内存地址赋给了指针p,此时指针p和s都指向了堆栈顶部的地址 0000 0001。2.在判断while(*p!=0)中,具体是判断p指向的字符与数字0之间的比较,显然,只有当p指向"\0'时,这个while循环才会结束,此...

C语言问题:指针

r-&gt;next=p,即令r的下一个结点指向p,图上表示就是r所指的结点画一个箭头指向p所指的结点。此时改变p所指的结点内容,相当于改变r-&gt;next所指的结点内容;但若改变p的指向,使其指向其他结点,则对r-&gt;next所指的结点无关且不再产生任何影响。

关于C语言指针的一个问题?

图中1处指针p没有初始化,它没有指向任何内存单元不能进行图中2处的赋值写入操作,这里会程序崩溃退出。

C语言 关于POINTER(指针)的问题, 急!!!

指针就是地址,作用是指向一个变量的地址

C语言中指针问题求解,这张图什么意思?

ptrl是一个两字节的指针,它指向urn[0],即 00DC 的位置 ptrl是表示指针指向的值,当前为 0x100 右边的图:ptrl = urn; //把ptrl的值,设置为urn的起始地址 ptrl指针的内存地址为 0x0C00,它的值为 0x00DC,即ptrl指针 指向urn[0]的地址。因为 ptrl是两字节指针,如果执行 ptrl++,...

C语言指针问题

一、如有定义char y[4]= "321"则表达式 *y+2的值是'5' 。分析:y是字符串数组首元素'3'的地址,*y的值就是字符'3',再加上2,就是字符'5'(也可以说是字符'5'的ASC码值)。二、 如有定义char z[2][4]={"MAT", "LAB"};,则表达式*(*z+2)的值是 'T'。分析:z是二维字符...

C语言指针问题

1、ptr赋值为arr地址后指向第一个元素,即元素6.2、*(ptr++) += 123;由于是右侧操作(递增后缀),所以先取ptr地址后再递增ptr,此时取得的地址还是第一个元素地址(递增后ptr指向第二个元素,也就是7,这是第一次递增),因此是对6+123=129,并保存原地址,即第一个元素地址,因此6被改为129...

c语言指针问题,求解答

首先 函数指针的定义 A、D定义为:A 定义指向函数的指针pf,所指向的函数参数为空,无返回值 D 定义指向函数的指针pf,函数参数为int,char型(不符题意,题目为int,char*),无返回值 B、D的定义为:定义函数pf,函数参数为空,返回类型为void *(void 型指针)单从函数指针的定义可排除BCD。其次...

c语言指针问题

pp是一个二维字符串类型的指针,也就是说它能保存2*3=6个字符串地址,每个字符串都只保存地址,这样就不限制大小,所以保存的是字符串;pp是这个指针的名字,它也代表的是该指针的首地址!pp是取pp的值,即它保存的地址!等价于pp[0];看1,***(pp+1),其中pp+1代表第二行,*(pp+1),即就...

C语言指针问题

1.这里根本就没有赋值的语句,所以没有复制。(*s)&amp;&amp;(*t)&amp;&amp;(*t++==*s++) 这个条件就是没到s的结束且没到t的结束且*t == *s,就循环,t和s的指针都往后移。2.p是指针数组,就是有两个指针 for(i=0;i&lt;2;i++) p[i]=ch[i];这个就是赋值给p指针,其中p[0] 等于ch二维...

c语言指针例题 c语言指针编程题及详解 c语言行指针 c语言指针详解 c语言指针类型 c语言指针地址 c语言指针数组 c语言中指针的定义 c语言指针的用法
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
和男朋友在七夕前一晚吵架是什么体验? 智慧景区建设内容有哪些 智慧景区智慧景区概念和内涵 建设智慧旅游景区有什么好处呢,景区电子门票有用吗 同性之间你大学经过最撩的一件事情是什么? 在角落窥视到的体育生和学霸的基情 ...通知后买家又不肯补运费差价,卖家该怎么办? ...一个手机买家非说我手机屏幕有问题,要我补钱给他,我该怎么办... TCL电视保修期内坏了厂家无法修复报废,让我补差价 ...补了差价淘宝卖家迟迟不给发货我该怎么办? 毛孔大怎么解决 皮肤毛孔粗大应该怎么办呀 皮肤毛孔粗大怎么解决要及时的清理皮肤 皮肤毛孔变大怎么办 频繁申请网贷被拒哪个能下款 红米k50至尊版红外遥控在哪 好好看!po文《甜文结局之后》by青灯 眉山到西昌的客车上面可以带鸡吗 描写冬天柏树的句子 冬天的树描写 国家级非物质文化遗产代表性项目名录申报理由 推荐省级非遗工坊的理由 长江七大支流的顺序 好评给150财富 笔顺表大全 笔画笔顺大全表 防走失产品牌子 五行缺金怎么化解五行缺金如何补救 面罩和护目镜防疫哪个好 男生说家里有猫代表什么意思 让别人帮忙寄快递,不知道快递费多少,钱要提前给吗 哪位高手能把C的指针相关问题讲明白请指点 ispn考试有谁知道 立方米符号是哪个 纳豆的功效与作用及食用方法 纳豆怎么吃 有什么好处你知道吗 网上怎么更改社保卡绑定的银行卡 社保卡解绑之后怎么绑回来? 我之前办的大王卡怎么最近感觉套餐不对劲了 用什么洗宾馆白床单不发黄 帕萨特汽车的玻璃水喷壶好换吗 word2016哪个版本最好用? 蜡水喷壶怎么喷泡泡 抖音使用剪映剪辑出来的视频为什么只播放一遍音乐 剪映先播一段音乐再视频怎么弄 荣耀magic2黑边多宽 微博紧急出手!这些账号,禁言 不充钱的传奇手游真的假的 收到样品账务怎么处理 北京营业执照注销 域控如何下发时间