网站建设的实验结论,上海网站建设 分类广告,热门的网页设计工具有哪些,好的数据库网站C语言允许函数的返回值是一个指针#xff08;地址#xff09;#xff0c;我们将这样的函数称为指针函数。
我们定义一个函数 strlong()#xff0c;用来返回两个字符串中较长的一个#xff1a;
#include stdio.h
#include string.hchar *strlong(char *s…C语言允许函数的返回值是一个指针地址我们将这样的函数称为指针函数。
我们定义一个函数 strlong()用来返回两个字符串中较长的一个
#include stdio.h
#include string.hchar *strlong(char *str1, char *str2){if(strlen(str1) strlen(str2)){return str1;}else{return str2;}
}int main(){char str1[30], str2[30], *str;gets(str1);gets(str2);str strlong(str1, str2);printf(Longer string: %s\n, str);return 0;
}运行结果
C Language↙
www.baidu.com↙
Longer string: www.baidu.com注意函数运行结束后会销毁在它内部定义的所有局部数据包括局部变量、局部数组和形式参数函数返回的指针请尽量不要指向这些数据。
示例
#include stdio.hint *func(){int n 100;return n;
}int main(){int *p func(), n;n *p;printf(value %d\n, n);return 0;
}运行结果
value 100n 是 func() 内部的局部变量func() 返回了指向 n 的指针func() 运行结束后 n 将被销毁使用 *p 应该获取不到 n 的值。但是从运行结果来看我们的推理好像是错误的func() 运行结束后 *p 依然可以获取局部变量 n 的值这个上面的观点不是相悖吗
为了进一步探讨不妨将上面的代码稍作修改在第9~10行之间增加一个函数调用看看会有什么效果
#include stdio.hint *func(){int n 100;return n;
}int main(){int *p func(), n;printf(www.baidu.com\n);n *p;printf(value %d\n, n);return 0;
}运行结果
www.baidu.com
value -2可以看到现在 p 指向的数据已经不是原来 n 的值了它变成了一个毫无意义的值。与前面的代码相比该段代码仅仅是在 *p 之前增加了一个函数调用却导致运行结果有天壤之别究竟是为什么呢
前面我们说函数运行结束后会销毁所有的局部数据这个观点正确。但是这里所谓的销毁并不是将局部数据所占用的内存全部抹掉而是程序放弃对它的使用权限弃之不理后面的代码可以随意使用这块内存。对于上面的两个例子func() 运行结束后 n 的内存依然保持原样值还是 100如果使用及时也能够得到正确的数据如果有其它函数被调用就会覆盖这块内存得到的数据就失去了意义。