当前位置:网站首页>函数的信息传递(C语言实践)
函数的信息传递(C语言实践)
2022-07-30 05:43:00 【大头鑫】
一点思考
函数返回指针
1、一种实现方式
char *inputSecond(void){
static char s[20]; //返回指针的函数,指向内容需要静态,才能保证指向内容不丢失
char *str=s; //指针一定要在定义的时候初始化,不然没机会初始化了
scanf("%s",str); //为s分配空间,并且用输入的内容给s赋值
return str;
}
2、第二种实现方式
char *inputSecond(void){
char *str=malloc((sizeof (char))*20);//分配20个字符的空间具有全局属性
scanf("%s",str);
return str;//返回指针,且刚刚分配的空间不会被销毁
}
3、反例
/*一个错误的示范*/
char *inputSecond(void){
char s[20]; //这部分内容属于该函数的
char *str=s;
scanf("%s",str);
return str;//返回给上一级函数的只有一个字符指针,而自己的s[20]会被销毁
}
指针作为形参
- 前提是:
int main(){
char b[20];
char *result=b; //指针指向数组
inputGetPointer(result);
}
void inputGetPointer(char *a){
scanf("%s",a);//为指向的内容(数组b)分配空间,并且用输入的字符串赋值
return;
}
反例:上一级函数无法获取字符数组
main:
- int main(){
char *result;//没有对应的数组空间
inputGetPointer(result);//错误示范
return 0;
}
- int main(){
/*一个错误的示范*/
void inputGetPointer(char *a){
char s[20];
char *str=s;
scanf("%s",s);
a=s;//a只能在定义的时候被赋值,错误
return;
}
数组名作为形参
void inputGetArray(char a[]){
scanf("%s",a);
//scanf可以给数组分配空间,直接影响到上一级函数的那个传形参a的数组
}
总结
1、 形参传递时:
传递的只是一个指针(如数组名,或指针,抑或是&a[0]的形式)
而这个指针指向的内容是属于调用该函数的上一级函数(如主函数)的。
2、C语言返回值只能是一个某某,不能是数组。
3、scanf函数会给数组分配空间,而不会给指针分配空间,指针分配空间可以使用上面提到的malloc。(因为数组的大小确定)
所以,像char *a; scanf("%s",a); 这样是不能操作的。
4、char a[20];只是声明有个数组,数组占这么大的空间,并没有为数组分配空间。
5、作为形参, char *a 和char a[] 实质上是一样的。
以上为实践心得,个人能力有限,有不正确和不妥的地方还请大家帮忙指正,谢谢~~边栏推荐
- Shardingsphere depots table and configuration example
- 史上超强最常用SQL语句大全
- Awd summary
- [HCTF 2018]admin
- Jackson serialization failure problem - oracle data return type can't find the corresponding Serializer
- 十三、Kotlin进阶学习:内联函数let、also、with、run、apply的用法。
- protobuf编码及网络通信应用(一)
- Mysql 客户端常见异常分析
- 根据ip地址获取地理位置及坐标(离线方式)
- The Request request body is repackaged to solve the problem that the request body can only be obtained once
猜你喜欢
随机推荐
Flink CDC implements Postgres to MySQL streaming processing transmission case
Bubble sort, selection sort, insertion sort, quick sort
MySQL - Multi-table query and case detailed explanation
【Spark】Spark 高频面试题英语版(1)
线程的5种状态
Servlet basic principles and application of common API methods
SQL Server 数据库之生成与执行 SQL 脚本
Calendar类的习题
Nacos配置中心用法详细介绍
sql concat() function
使用kotlin扩展插件/依赖项简化代码(在最新版本4.0以后,此插件已被弃用,故请选择性学习,以了解为主。)
[Getting C language from zero basis - navigation summary]
Flink-流/批/OLAP一体得到Flink引擎
七、Kotlin基础学习:1、创建类;2、构造函数;3、继承;4、封装;5、抽象类;6、接口;7、嵌套类;8、内部类;9、枚举类
【MySQL功法】第5话 · SQL单表查询
c#下Web3合约空投、转账调用代码
Understand JDBC in one article
Invalid bound statement (not found)出现的原因和解决方法
【SQL】SQL 高频面试题英语版(1)
Competition WP in May





![[HCTF 2018]admin](/img/4e/58234ca163c22fc334334eb89a5b00.png)


