2013-7-11学习作业[有面试题]

简介: 1.void GetMemory(char *p) { p = (char *)malloc(100); } void Test(void) { char *str = NULL; GetMemory...
1.void GetMemory(char *p)
{
p = (char *)malloc(100);
}
void Test(void)
{
char *str = NULL;
GetMemory(str);  
strcpy(str, "hello world");
printf(str);
}
 
请问运行Test函数会有什么样的结果?
答:
这个是形参改变实参的问题:可以有两种方法解决

形参改变影响实参主要应用在以下两个方面:

1.用于外部函数要交换主函数中的两个值,可以用指针来实现,但通过指针来实现主函数中两个数的交换必须要知道,哪些类型属于值传递,哪些类型属于地址传递,对于值传递的那些类型(例如:整形、字符型)才有必要用指针来实现,因为数组,字符串属于地址传递类型,所以没必要在外部函数通过用指针来实现主函数中的两个数的交换。举例:

2013-7-11作业 - 蓬莱仙羽 - IT达人的博客

2.在开辟空间的时候使用二级指针来实现主函数中指针内存的开辟,不然如果不用二级指针的话就必须在外部开辟空间的函数有一个返回值类型,然后赋值给主函数中的指针,如果不通过这两种方法实现的话就可能引发内存问题,举例:

方法 一、通过在外部开辟空间的函数里有返回指针类型,然后赋值给主函数中的指针的方法,来实现主函数中指针空间的开辟

2013-7-11作业 - 蓬莱仙羽 - IT达人的博客

方法二、通过二级指针来实现对主函数中指针的赋值,所谓二级指针就是指向指针的地址

2013-7-11作业 - 蓬莱仙羽 - IT达人的博客



2.char *GetMemory(void)
{  
char p[] = "hello world";  //“hello world存储在静态区域,访问权限就局限在函数内部,生命周期随着函数的终止而终止”
//char *p="hello world"; //存储在静态去,生命周期随着程序的终止而结束,所以外部可以打印出这段“hello world”
return p;
}
void Test(void)
{
char *str = NULL;
str = GetMemory();   
printf(str);
}
 
请问运行Test函数会有什么样的结果?
答:

3.Void GetMemory2(char **p, int num)    //二重地址就是取指针的地址
{
*p = (char *)malloc(num);   //这里的*p也就是str,相当于str=(char *)malloc(num);其实已经向Test中str开辟空间了
}
void Test(void)
{
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, "hello");  
printf(str);   
}
请问运行Test函数会有什么样的结果?
答:hello

4.void Test(void)
{
  char *str = (char *) malloc(100);
    strcpy(str, “hello”);
    free(str);     
    if(str != NULL)
    {
      strcpy(str, “world”);
      printf(str);
    }
}
请问运行Test函数会有什么样的结果?
答:world

5.用#define定义一个宏MAX,取得整形a和b中的比较大数的值

//

//  main.c

//  2013-5-11作业5

//

//  Created by 丁小未 on 13-7-11.

//  Copyright (c) 2013年 dingxiaowei. All rights reserved.

//


#include <stdio.h>

#define max(a,b) (a>b?:a,b)

//#define Max(a,b) a>b

int maxValue(int a,int b)

{

//方法一:

//    if (Max((a), (b))) {    //注意:非常有必要对a,b加上括号,正对那种Max(a*c,b)  这里有符号的优先级问题,如果比>要低,那么就会有问题

//        return a;

//    }

//    else

//        return b;


//方法二:

    return max((a),( b));

}


int main(int argc, const char * argv[])

{

    int maxNum=maxValue(10, 11);

    printf("%d",maxNum);

    return 0;

}

6.使用多个文件编译项目程序,文件a中定义用递归方法计算1+3+5。。。。97+99的函数int funA(int iNum),文件b中定义用指针方法排序如意从控制台输入的10个数字,函数为int *funB(int *pNum),文件mian.c调取文件a和b的函数,并输出结果
2013-7-11作业 - 蓬莱仙羽 - IT达人的博客
 
相关文章
|
26天前
|
算法 前端开发 Java
数据结构与算法学习四:单链表面试题,新浪、腾讯【有难度】、百度面试题
这篇文章总结了单链表的常见面试题,并提供了详细的问题分析、思路分析以及Java代码实现,包括求单链表中有效节点的个数、查找单链表中的倒数第k个节点、单链表的反转以及从尾到头打印单链表等题目。
28 1
数据结构与算法学习四:单链表面试题,新浪、腾讯【有难度】、百度面试题
|
22天前
|
Java 应用服务中间件 程序员
JVM知识体系学习八:OOM的案例(承接上篇博文,可以作为面试中的案例)
这篇文章通过多个案例深入探讨了Java虚拟机(JVM)中的内存溢出问题,涵盖了堆内存、方法区、直接内存和栈内存溢出的原因、诊断方法和解决方案,并讨论了不同JDK版本垃圾回收器的变化。
23 4
|
1月前
|
XML 前端开发 Java
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
本文阐述了Spring、Spring Boot和Spring MVC的关系与区别,指出Spring是一个轻量级、一站式、模块化的应用程序开发框架,Spring MVC是Spring的一个子框架,专注于Web应用和网络接口开发,而Spring Boot则是对Spring的封装,用于简化Spring应用的开发。
87 0
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
|
2月前
|
网络协议 算法 数据库
|
5月前
|
前端开发 Java C#
GitHub突破5k Star!这件事情我坚持了3年,努力打造C#/.NET/.NET Core全面的学习、工作、面试指南知识库
GitHub突破5k Star!这件事情我坚持了3年,努力打造C#/.NET/.NET Core全面的学习、工作、面试指南知识库
|
6月前
|
机器学习/深度学习 数据挖掘 开发工具
2024年最全0基础学python开发工具及学习平台推荐_python平台a,面试阿里巴巴客服
2024年最全0基础学python开发工具及学习平台推荐_python平台a,面试阿里巴巴客服
2024年最全0基础学python开发工具及学习平台推荐_python平台a,面试阿里巴巴客服
|
6月前
|
Java 程序员 C语言
2024年Python最新【Python学习教程】Python类和对象_python中类和对象的讲解,Python最新面试题
2024年Python最新【Python学习教程】Python类和对象_python中类和对象的讲解,Python最新面试题
2024年Python最新【Python学习教程】Python类和对象_python中类和对象的讲解,Python最新面试题
|
6月前
|
前端开发 JavaScript 程序员
async-validator 源码学习(一):文档翻译,2024年最新如何面试大厂
async-validator 源码学习(一):文档翻译,2024年最新如何面试大厂
|
6月前
|
Python
【python学习小案例】提升兴趣之模拟系统入侵,2024年最新面试阿里运营一般问什么
【python学习小案例】提升兴趣之模拟系统入侵,2024年最新面试阿里运营一般问什么
|
6月前
|
存储 Java Shell
【Python学习教程】Python函数和lambda表达式_6(1),2024蚂蚁金服面试题及答案
【Python学习教程】Python函数和lambda表达式_6(1),2024蚂蚁金服面试题及答案