再来一发! C语言菜鸟的第二个问题。

shizhong_q 2014-09-24 04:00:03


各位大神见笑了。

问题一:
在指针与一维数组的关系中,我明白数组名是一个指针常量。那么有如下问题;
比如这个代码:



当时有人讲的时候这样说:
f函数运行结束后,s中的数组就不能再被其他函数使用,因为被释放了。
这个问题听起来不知所云? 原谅我表达能力不强!
下面更详细一点:
f 函数运行结束后, s 函数初始化的数组是不是就会被释放掉?
如果在f 函数运行结束后【内存释放了】,
我再次在main 函数中以指针的方式调用, 它是不是会重新再次为该数组分配一些内存?



是不是有些烦了?
别。。。 还有 question two



问题2:
在上面那段代码中, 为什么 parr【3】 直接就是 数组的第三个元素,
我所知道的表示方法有, parr是个地址, *(parr+2)代表第三个元素。 还有其他的表示方法吗?
还有为什么 parr【3】 也代表第三个元素呢? 是个规定吗?
...全文
405 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
Moyu18_06_12 2014-09-28
  • 打赏
  • 举报
回复
question1:是s()函数结束后,函数内定义的变量会被释放 question2:【3】是代表第四个元素
qq_15953409 2014-09-28
  • 打赏
  • 举报
回复
至于第二个问题,对于指针(数组名) : *(p+数字)==p[数字]
qq_15953409 2014-09-28
  • 打赏
  • 举报
回复
我再次在main 函数中以指针的方式调用, 它是不是会重新再次为该数组分配一些内存? 在main函数中,不能调用 s 函数中的数组,因为在s 函数结束后会被回收
qq_15953409 2014-09-28
  • 打赏
  • 举报
回复
f函数运行结束后,s中的数组就不能再被其他函数使用,因为被释放了。 这个问题是这样的,在f函数创建了一个新的指针变量 praa ,在 f 函数以外你不能用praa 来对它所指向的数组操作,因为他是局部变量,在f 函数结束时已被回收。但是,在s 函数中,你依旧可以对数组进行操作,失效的只是f 函数中的指针变量,而不是数组(数组不是在f 函数中创建的)
sanzhong104204 2014-09-28
  • 打赏
  • 举报
回复
看来确实是基础没打牢。先找书理解下程序是怎么运行的,弄清函数调用与返回的过程,然后再来看数组和指针的问题吧
「已注销」 2014-09-28
  • 打赏
  • 举报
回复
引用
在上面那段代码中, 为什么 parr【3】 直接就是 数组的第三个元素, 我所知道的表示方法有, parr是个地址, *(parr+2)代表第三个元素。 还有其他的表示方法吗? 还有为什么 parr【3】 也代表第三个元素呢? 是个规定吗?
parr[3]不是第三个元素,是第四个元素。*(parr+2)和parr[2]得到的运行结果是相同的,但是前者的运行效率高,至于为什么,再往底层走!
「已注销」 2014-09-28
  • 打赏
  • 举报
回复
问题一:
引用
f 函数运行结束后, s 函数初始化的数组是不是就会被释放掉?
如果在f 函数运行结束后【内存释放了】,
我再次在main 函数中以指针的方式调用, 它是不是会重新再次为该数组分配一些内存?

函数f运行介绍时候,也就是return的时候,那么程序将要执行s函数的printf()语句,这时候你定义的数组shuzu并没有被释放掉,不然你输出shuzu[3]的时候,就输不出值了。当出现执行了printf("", shuzu[3]);之后,返回到main函数,这时候,你的s函数所定义的所有变量都讲会消失。包括你的数组shuzu[5],在内存中就被释放掉了。
你的变量都是定义在栈区里面的,会自动释放,如果你的变量定义在堆区里面,不手动释放,变量是不会被释放的,会导致内存的泄露,因此,你可以写一个小病毒,故意申请了堆区的很多变量,不去释放它,导致运行你的程序的机器内存耗费越来越大,最后死机!
内存图画得见笑了。
zhang蜗牛 2014-09-27
  • 打赏
  • 举报
回复
s函数执行完毕后,数组的内存没有被释放,只是没有指针指到之前数组的内存了而已,后面会被覆盖的。 parr[3]和shuzu[3]指向的是同一块内存,也就是是同一个值,原因是这个中括号[]是一个变址运算符,并且最开始数组的首地址传给了parr。
csu白菜 2014-09-27
  • 打赏
  • 举报
回复
问题2的回答,如果你看过《C和指针》就明白了,[ ]等价于*(),int array[5]; 2[array]其实就是*(2+arry),有意思的是,数组下标还可以是负数。《c专家编程》关于数组和指针的关系用了3章讨论,可以好好看下。
敬畏者 2014-09-26
  • 打赏
  • 举报
回复
hk是正确的
leo000111 2014-09-26
  • 打赏
  • 举报
回复
引用 8 楼 u013163178 的回复:
请参考《C专家编程》
+1, 这本书对你的问题有非常详尽的描述,堪称c语言学习神书
li4c 2014-09-24
  • 打赏
  • 举报
回复
请参考《C专家编程》
Lion_Peng 2014-09-24
  • 打赏
  • 举报
回复
到百度上搜关键字。 问题1:“局部变量” “作用域” “生命周期”。 问题2:“数组名” “指针”的关系。 看完后应该就明白了。
  • 打赏
  • 举报
回复
.........没注意你在f里把shuzu[3]改成88了,这样显示的是88.如果你把parr[3]注释掉,显示出来的应该是4.
  • 打赏
  • 举报
回复
parr[3]应该是第4个元素,你搞错了。显示出来的值应该是4,不是3.
  • 打赏
  • 举报
回复
引用
f函数运行结束后,s中的数组就不能再被其他函数使用,因为被释放了。 这个问题听起来不知所云? 原谅我表达能力不强! 下面更详细一点: f 函数运行结束后, s 函数初始化的数组是不是就会被释放掉? 如果在f 函数运行结束后【内存释放了】,
这家伙果然不明不白,因为shuzu是在s函数里声明的,s函数运行完后shuzu就被销毁了,当然不能用了,但是在f函数运行完后shuzu还是能用的,因为s函数还没运行完。你那句printf("%d\n",shuzu[3]);不就是在f函数之后使用的shuzu么。
赵4老师 2014-09-24
  • 打赏
  • 举报
回复
栈中的基本变量退出其作用域时,没有谁执行一段代码去释放/销毁/析构它所占用的内存,仅仅是没人再去理会的留在当前栈顶上方的若干遗留下来可被后续压栈操作覆盖的无用数据而已。 而栈中的类变量退出其作用域时,会自动执行其析构函数,……
赵4老师 2014-09-24
  • 打赏
  • 举报
回复
理解讨论之前请先学会如何观察
赵4老师 2014-09-24
  • 打赏
  • 举报
回复
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构…… 对学习编程者的忠告: 多用小脑和手,少用大脑、眼睛和嘴,会更快地学会编程! 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步Debug版对应汇编一行! 单步Debug版对应汇编千行不如单步Release版对应汇编一行! VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。 对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。 (Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。) 想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。 从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单! 指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。” 但我又不得不承认: 有那么些人喜欢或者适合用“先具体再抽象”的方法学习和理解复杂事物; 而另一些人喜欢或者适合用“先抽象再具体”的方法学习和理解复杂事物。 而我本人属前者。 不要企图依赖输出指针相关表达式...的值【比如printf("%p\n",...);或者cout<<...】来理解指针的本质, 而要依赖调试时的反汇编窗口中的C/C++代码【比如void *p=(void *)(...);】及其对应汇编指令以及内存窗口中的内存地址和内存值来理解指针的本质。 这辈子不看内存地址和内存值;只画链表、指针示意图,画堆栈示意图,画各种示意图,甚至自己没画过而只看过书上的图……能从本质上理解指针、理解函数参数传递吗?本人深表怀疑! 这辈子不种麦不收麦不将麦粒拿去磨面;只吃馒头、吃面条、吃面包、……甚至从没看过别人怎么蒸馒头,压面条,烤面包,……能从本质上理解面粉、理解面食吗?本人深表怀疑!! 提醒: “学习用汇编语言写程序” 和 “VC调试(TC或BC用TD调试)时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。 (Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。) 想要从本质上理解C指针,必须学习C和汇编的对应关系。” 不是一回事! 不要迷信书、考题、老师、回帖; 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实! 有人说一套做一套,你相信他说的还是相信他做的? 其实严格来说这个世界上古往今来所有人都是说一套做一套,不是吗? 不要写连自己也预测不了结果的代码! 电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址; 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息…… 十字链表交换任意两个节点C源代码(C指针应用终极挑战)http://download.csdn.net/detail/zhao4zhong1/5532495
什么是网络空间安全?   网络空间安全专业是网络空间安全一级学科下的专业,学科代码为“083900”,授予“工学”学位,涉及到以信息构建的各种空间领域,研究网络空间的组成、形态、安全、管理等。  网络空间安全专业,致力于培养“互联网+”时代能够支撑国家网络空间安全领域的具有较强的工程实践能力,系统掌握网络空间安全的基本理论和关键技术,能够在网络空间安全产业以及其他国民经济部门,从事各类网络空间相关的软硬件开发、系统设计与分析、网络空间安全规划管理等工作,具有强烈的社会责任感和使命感、宽广的国际视野、勇于探索的创新精神和实践能力的拔尖创新人才和行业高级工程人才。  国家安全大致分为领土安全,领海安全,领空安全,太空(空天)安全,网络空间安全五部分。 网络空间安全的前景如何? 1.网络安全对国家安全牵一发而动全身。  过去,美国借口维护国家安全,单方面制裁中兴,华为,打着保护国家的幌子将商业问题政治化,公然阻碍公平竞争和技术进步,并让许多中国企业损失惨重,虽然这种行为损人而不利己,但却得了本国人民的支持。这是为什么?   因为人人都知道网络安全不可忽视,国家安全非常重要。互联网的快速发展,给全世界带来了巨大改变,它使得各国联结更加紧密,也让国家边界概念逐渐淡化。但近年来,互联网在造福人类的同时,也被人利用进行恐怖主义、违法犯罪等活动。  一些国家专门成立了网战司令部,把网络作为攻击别国的武器之一,将他国军事网络、通讯、电力、航空运输、金融系统以及核电站等关系国计民生的重要部门和行业作为攻击目标。一旦两国出现问题,便以互联网为平台的恐怖活动和违法犯罪活动对其国家发动攻击,使其社会不稳定。  因此,网络安全对国家安全牵一发而动全身,保障网络安全对维护国家安全具有极端重要,这也是当下我国快速发展过程中最重视的一方面。 2.万物互联,安全为基,企业的网络安全不可忽视。腾讯副总裁马斌曾表示:甭管企业原来多牛,安全做不好,一瞬间说没就没也是常事。的确,现在所有企业都在谈数字化、智能化、云管端等等,但若你没有数字安全,账号信息一旦被泄漏,数据被非法人员使用,那么不仅会给企业带来巨大损失,甚至毁灭性打击,同时也给企业用户埋下了潜在危险。社会发展离不科学技术,而技术永远是一把双刃剑。有光明的地方就有黑暗,有人能用这样的技术造福我们,也有人用这样的技术给我们造成很大损失,尤其是现在,当网络安全的监管发展速度远远比不上科技的发展速度之时,我们只要使用网络,就会存在危机。以前针对信息安全,我们是发现问题,解决问题,可未来企业必须在网络安全上多下功夫,提前预防。 3.只要有互联网,就必须有网络安全。曾经看到一位网友说:“只要是人写的代码就有漏洞。没有不存在漏洞的系统,只有没被发现漏洞的系统。”细品之后,你会发现这句话的确有一定道理。为了生活的便利,我们将身份证、银行卡、社保卡等重要证件都绑定在了一些网站和App上,方便自己的同时,也将个人隐私和重要信息变相暴露在了不法分子眼中,这类人利用系统漏洞来获取用户信息,进行网络诈骗或非法买卖。根据中国消费者协会发布的《APP个人信息泄露情况调查报告》显示,85.2%的人遇到过个人信息泄露的情况。网络安全无时无刻不在威胁着我国互联网上8.54亿人民群众的信息、财产安全。 4.《IDC全球网络安全支出指南》报告显示,预计2023年全球网络安全支出将达到1571.6亿美元。全球各国政府和企业对网络安全技术的采纳愈加重视,市场环境一路向好,IDC根据报告内容,预测今年全球网络安全相关硬件、软件、服务市场的总投资达到1202.8亿美元,2023年达到1571.6亿美元。与全球相比,我国网络安全市场虽起步较晚,但近几年在国家政策、相关法规、数字经济、威胁态势等多方需求驱动下,整体市场规模得到了迅速发展,未来国内网络安全市场的发展潜力和空间将进一步加大。 5.在互联网萧条的大环境下,网络安全行业融资金额达到了29亿。去年被互联网人调侃为“裁员年”,众多知名企业受大环境影响,都在变相裁员、节约成本。但是,2019年初至今,越来越多的投资机构开始涌入网络安全这一赛道,据不完全统计,光是2019.3-2020.3一年时间,网络安全行业发生了25起融资事件,融资金额至少达到了29亿元,其中10家网络安全企业的融资金额都在亿元级别。受疫情影响,2020年很多行业都不太乐观,甚至很难生存下去,但是网络安全行业在2020年的第一季度亿元级融资就到达了5起。疫情将互联网线上购物推送到了全国人民手中,更是将网络安全推上了高速车道。无法复工的那段日子,企业都采用远程办公的方式上班,那么如何保证线上数据的安全,就成了大家的难题,这时候,网络安全的重要作用就得到了完全发挥。根据历史情况,不难发现,网络安全职业几乎不受经济大环境影响。 6.教育部将网络空间安全纳入高校一级学科目录。前几年,网络安全基本只服务于国家的一些重要机构,而近两年随着互联网行业的迅速发展,从全球范围来看,网络安全带来的风险正变得日益突出,并不断向政治、经济、文化、社会、国防等多个领域传导渗透,导致人才紧缺。为了尽快填满市场需求,教育部特将网络安全列为了高校一级学科,并要求各单位加强“网络空间安全”的学科建设,做好人才培养工作。并且,国家连续出台的一系列政策、法规和标准,都在为网络安全行业指明发展方向、坚定发展信心。国家政策大力推动网络安全的发展。2013年以来,我国先后成立了国家安全委员会、中央网络安全和信息化领导小组,出台了《国家安全法》、《网络安全法》、《国家网络空间安全战略》、《网络空间国际合作战略》等法律法规和重要指导文件。2014年在成立中央网络安全和信息化领导小组后的首次会议上,国家明确表示“没有网络安全就没有国家安全,没有信息化就没有现代化”。由此可见中央全面深化改革、加强顶层设计的意志,显示出了在保障网络安全、维护国家利益、推动信息化发展方面的决心。安全是发展的前提,发展是安全的保障,安全和发展必须同步推进。基于以上原因,对于正在考虑入行网络安全的朋友,前景没什么好担心的,最该担心的是怎样让自己成为行业所需的合格人才! 网络空间安全的薪资如何?先聊大家最关心的问题,毕竟除了老板外,员工辛苦工作后的呈现结果都体现在了薪资上。薪资的多少决定了大家的消费标准和生活水平,谁不想住大别墅开着豪车过得爽一点呢?之前,猎聘联合上海控安推出了《2019中国网络安全与功能安全人才白皮书》。该白皮书基于猎聘平台5200万+中高端人才,系统性分析了网络安全与功能安全领域的人才画像、行业及地域供需、以及行业薪酬、发展情况等等。报告显示,2019年我国网络安全人才的平均年薪为24.09万元。从地域来看,一线城市薪酬较高,深圳位居榜首,平均年薪29.11万元,其次是北京,28.77万元,然后是上海,28.16万元。超过平均薪资的城市有6个,其中排名第一的北京与排名第六的苏州仅相差3千元。根据职位的不同,其薪资也有很大差别,由此可见,网络安全人员的就业前景非常乐观,薪酬水平随职业发展也有很大增长空间。 网络安全的薪资为什么高?看了以上的薪资调研,大家一定心有疑惑:为什么普通专员的年薪都能15.61万,平均每月1.3万呢?核心原因:市场需求大于人才供给。就像前年星巴克出品的猫爪杯一样,当用户需求大于产品存量时,那么想要获得心爱的猫爪杯,你就必须支付更高的价格。前几年,网络安全基本只服务于国家的一些重要机构,而近两年随着互联网行业的迅速发展,从全球范围来看,网络安全带来的风险正变得日益突出,并不断向政治、经济、文化、社会、国防等多个领域传导渗透。2017 年 6 月 1 日,《网络安全法》正式颁布实施,其中第二十条规定“国家支持企业和高等学校、职业学校等教育培训机构开展网络安全相关教育与培训,采取多种方式培养网络安全人才,促进网络安全的人才发展。”。据新华社之前的相关报道,目前全国已有近200所高校开设了信息安全或网络空间安全专业,高校每年大概培养两万余人,但这仍然不能满足社会对相关人才的需求。与此同时,网络安全本身是一个攻防实战性很强的专业领域,当前大学教育又“照本宣科”,所以很难培养出真正的实操性网络安全人员,再加上企业对其需求持续增长,而当前相关人才本就普遍紧缺的大环境下,企业想要真正的招到人,就必须在薪酬福利上有足够的竞争优势。       

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧