081.Return Pointer Function 返回指针的函数
2015-07-19 01:27
267 查看
---------------
main.m
---------------
#import
<Foundation/Foundation.h>
#define LENGTH
5
int* map(int*
data ,int
(*fn)())
{
static
int result[LENGTH];
int
i = 0;
for(int*
p = data; p < data +
LENGTH ; p++)
{
result[i++] = (*fn)(*p);
}
return
result;
}
int
noChange(int
val)
{
return val;
}
int
square(int
val)
{
return val * val;
}
int
cube(int
val)
{
return val * val * val;
}
int
main()
{
int
data[] = {20
, 12
, 8
, 36,
24};
int* arr1 =
map(data ,
noChange);
for(int
i =
0 ; i <
LENGTH ; i ++)
{
printf("%d , "
, *(arr1 + i));
}
printf("\n");
int* arr2 =
map(data ,
square);
for(int
i =
0 ; i <
LENGTH ; i ++)
{
printf("%d , "
, *(arr2 + i));
}
printf("\n");
int* arr3 =
map(data ,
cube);
for(int
i =
0 ; i <
LENGTH ; i ++)
{
printf("%d , "
, *(arr3 + i));
}
printf("\n");
}
一、编写本节代码的具体步骤:
1.参照003节的代码编写步骤。
二、本节代码涉及到的知识点:
1.当函数返回指针时需要注意,如果该指针指向的是被调用函数中的一个局部变量,这将非常危险。
2.因为函数调用完了之后,该函数中局部变量所占用的内存空间将立即被释放,此时返回的数据是不确定的。
3.为了保证函数返回的指针是有效的,这个局部变量应该使用static来修饰。
main.m
---------------
#import
<Foundation/Foundation.h>
#define LENGTH
5
int* map(int*
data ,int
(*fn)())
{
static
int result[LENGTH];
int
i = 0;
for(int*
p = data; p < data +
LENGTH ; p++)
{
result[i++] = (*fn)(*p);
}
return
result;
}
int
noChange(int
val)
{
return val;
}
int
square(int
val)
{
return val * val;
}
int
cube(int
val)
{
return val * val * val;
}
int
main()
{
int
data[] = {20
, 12
, 8
, 36,
24};
int* arr1 =
map(data ,
noChange);
for(int
i =
0 ; i <
LENGTH ; i ++)
{
printf("%d , "
, *(arr1 + i));
}
printf("\n");
int* arr2 =
map(data ,
square);
for(int
i =
0 ; i <
LENGTH ; i ++)
{
printf("%d , "
, *(arr2 + i));
}
printf("\n");
int* arr3 =
map(data ,
cube);
for(int
i =
0 ; i <
LENGTH ; i ++)
{
printf("%d , "
, *(arr3 + i));
}
printf("\n");
}
一、编写本节代码的具体步骤:
1.参照003节的代码编写步骤。
二、本节代码涉及到的知识点:
1.当函数返回指针时需要注意,如果该指针指向的是被调用函数中的一个局部变量,这将非常危险。
2.因为函数调用完了之后,该函数中局部变量所占用的内存空间将立即被释放,此时返回的数据是不确定的。
3.为了保证函数返回的指针是有效的,这个局部变量应该使用static来修饰。
相关文章推荐
- 079.Pointer Function 指向函数的指针
- 080.Function Pointer Arg 函数指针作为函数参数
- 如何查看源码
- 078.Char Pointer Arg 字符指针作为函数参数
- JAVA基础_Java IO流 控制台到记事本、记事本到控制台及详解
- 076.Pointer Two Array 指向多维数组的指针
- 077.Char Pointer String 用指针表示字符串
- linux下svn的用法小结
- IOC----LightInject
- CD多线程的使用(三)
- [leetcode] 204.Count Primes
- 正确理解ThreadLocal,线程私有
- SQlife(数据库)
- oracle账号
- Spring依赖注入的几种实现方式
- eclipse.ini
- 075.Quick Sort 快速排序
- Android Studio AIDL 自定义类型找不到问题
- SQLServer检查表字段是否存在,不存在则创建的脚本
- 074.Traverse Array 遍历数组的常见错误