---------------
main.m
---------------
#import
<Foundation/Foundation.h>
#define LENGTH
5
int* map(int* data ,int (*fn)())
{
static int result[LENGTH];
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 noChange(int val)
{
return val;
}
int
square(int
val)
{
return val * val;
{
return val * val;
}
int
cube(int
val)
{
return val * val * val;
}
int main()
{
{
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");
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来修饰。