请教大家一个c语言中的问题?这个问题已经困扰我很久了。题目如下: C语言问题,高手来!题目如下:

作者&投稿:应悦 (若有异议请与网页底部的电邮联系)
首先你要明确这样一个问题。
在C语言中,变量是有生命周期和作用域的(链接类型暂时不提)
生命周期,指变量对程序可见的范围

作用域,指变量对程序可修改的范围
注意:有生命周期的变量不一定有作用域(也就是说,可以访问的变量不一定全是可修改的)
另外你应该知道,C语言函数只能按值传参,而且形参被分配在栈上

对于指针,同样是按值传参的,只不过对指针进行间接引用(解除指针运算)时,被访问的都是同一个地址罢了,所以指针是个不特例的特例

有了这些基础知识,我们可以来解决你的问题了
首先,你第一个例子里的程序在fun函数中定义了一个指针y,并使指针y指向了形参x,也就是说,y指向了实参(可以类比得出这个结论)..所以函数可以成功返回,因为y指向的是实参,实参在函数中有完全的生名周期和作用域(可见性和可修改性),所以可以返回,他返回的地址在栈上,不过却是实参的地址,所以有效
第二个例子中,你的指针p指向了一个栈上变量,这个栈上变量在函数返回时(return时)就已经变得无效,所以你的返回是一个无效的地址(即改地址没有完全的生命周期和作用域),所以出错

编程提示:不要返回声明在栈上的变量,如果一定要使用,可以使用动态内存

好了,我的回答就是这样,希望可以帮助到你

结构体本身就是一个特别的指针,也就是说例子1中的x和y都是ST类型的指针,他们只是存放了结构体的首地址,而普通变量就不是了,普通变量存放的就是变量本身的值。这么说的话,例子1中fun函数就是一个传址调用,而例子2却是传值调用。传值调用仅仅把数值传送给了x然后x=10又把x的值修改但是不影响a的数值,至于x变量的地址那就是个随机的内存地址,没有意义。

地址可以返回,但是例二中函数中定义的x在函数结束时就释放消失了哦,于是返回的地址指向垃圾数据,没有疑问给分哦亲

为什么小朋友都喜欢玩过家家?这个二货问题困扰我很久了,求专业解释~

因为小孩的大部分对世界的认识,都是通过大人来的,他们虽然看不懂大人的世界,但是因为好奇,所以会想到去扮演大人的角色来满足自己想要快速长大的愿望。理解?

#include
int main(){
int h1,m1,s1;
int h2,m2,s2;
int h3,m3,s3;
printf("please input sleep time:");
scanf("%d:%d:%d",&h1,&m1,&s1);//输入开始睡觉时间
printf("please input wake time:");
scanf("%d:%d:%d",&h2,&m2,&s2);//输入结束睡觉时间
//计算秒钟
s3=s2-s1;
if(s3<0){
s3+=60;
m2--;
}
//计算分钟
m3=m2-m1;
if(m3<0){
m3+=60;
h2--;
}
//计算小时
h3=h2-h1;
//输出
printf("%2d:%2d:%2d",h3,m3,s3);
system("pause");//暂停一下
}

请教一个C语言问题,十分感谢!
答:就像A有两个是二维数组的元素A[0],和A[1],但是A只指向第一个元素A[0]..4)同理,同时作为一个一维数组的A[0][0],可以理解是一个数组名即{A[0][0][0],A[0][0][1]}的数组名,指向第一个元素A[0][0][0]...5)总结,一个N维数组X,这个X即是一个N维数组,当然也是这个N维...

请教一个简单的C语言问题,请大家帮帮忙~~
答:,那么 你输入时也必须有逗号 否则出错 所以一般不这么输入 用也应该有提示 而里面的 内容 %2d %3d 意思是2位用来显示 不足补齐超出继续 你输入的是 123 那么12 这是2位 用来输出 而剩下3 取3位补齐 还是3 你第二次用的 123 这号成为了 下次的读取操作 还有什么细节问题 你再补充吧 ...

请教一个很简单的c语言问题,我是初学者
答:仅分析第二条语句printf("a%cb%c\bc%c\tabc\n",c1,c2,c3); } 其中a输出a-》“a”,c输出c1也就是a-》“aa”,b输出b-》“aab”,c输出c2也就是b-》“aabb”,\b输出退格,把上一个b擦掉了-》“aab”,c输出c-》“aabc”,c输出c3->"aabcc",\t输出TAB符号,前进八个空格-...

C语言编程中的问题
答:出现问题原因清楚了,那么如何学习呢?请你看【C语言学习六步曲】 在程序开发的过程中,上机调试程序是一个不可缺少的重要环节。“三分编程七分调试”,说明程序调试的工作量要比编程大得多。这里以如何上机调试C程序来说明C语言的学习方法。 第一步、验证性练习 在这一步要求按照教材上的程序实例进行原样输入,运行...

有一道C语言的问题想请教一下大家,谢谢
答:delay();} else if((t->minute==0)&&(t->second!=0)){ t->second--;delay();} } 原因是几个if是相互独立的 3. for (i=0;i<n;i++);后面多了一个;循环体就是一个分号(空语句)所以相当于 执行n次空循环后 再执行后面的花括号里的计时语句 循环对计时的次数不起作用 ...

一个C语言程序问题,看晕了,求大神详解
答:第二次循环: 条件1不成立。条件2成立,x=3。执行continue,忽略语句3,执行下个循环。第三次循环: 条件1不成立。条件2不成立,执行3,x=0, y=3 第四次循环: 条件1不成立。条件2成立,x=5。执行continue。忽略3,执行下一个循环。第五次循环: 条件1不成立。条件2不成立,执行3,x=2, y...

请教一个C语言的问题。void ave(struct stu *ps);是定义一个函数,然后...
答:这属于编译原理的范围了。简单的说,这是编译器的编译方式决定的。编译器要执行源代码前会从前到后扫描源代码,将碰到的函数名记录到一张表格中,如果遇到有函数调用,就用表格中的记录去寻找该函数名的函数源代码,如果你的函数写在主函数后面有没有函数声明,在主函数中又调用了该函数,编译器扫描到...

一个C语言问题
答:然后(int)x*100+0.5这样强制转换为一个整形数,起到了舍入的作用.我们知道,这种强制转换是不考虑精度的,在内存中就是把一个高字节的数强行缩短成低字节,所以精度会丢失.经过+0.5后再取整得到的就是舍入的值.最后再把这个数/100.0得到结果.这种题你根据它的意思,分析选项的异同就可以了....

火急请教一个c语言的问题
答:使用程序的ID(getpid())来作为初始化种子,在同一个程序中这个种子是固定的 随机输出十个0-100之间的整数 include <stdlib.h> include <stdio.h> include void main( void ){ int i,k;srand( (unsigned)time( NULL ) );for( i = 0; i < 10;i++ ){ k=rand()%100;printf( " ...

请教几个简单的C语言问题!急!在线等!
答:4、二进制文件虽然也可在屏幕上显示,但其内容无法读懂。C系统在处理这些文件时,并不区分类型,都看成是字符流,按字节进行处理。格式控制串是一个字符串,必须用双引号括起来,它表示了输入输出量的数据类型。5、空语句:只有分号“;”组成的语句称为空语句。空语句是什么也不执行的语句。在程序中...