题目思路很简单,关键点在于函数返回值要符合题意要求。用C语言有几个要解决的问题。
1.二级指针的初始化和赋值
初始化:二维指针初始化分配空间分成两步操作:
- 先分配二维指针的行数
- 再分配每行的数据空间
赋值:
如:引入一数组s[ ][ ],令p=s
p+i是数组s的第i行的首地址
*(p+i)则是数组s第i行第1列的元素的地址
2.C语言整形转字符串.
一开始想要使用itoa().提示:implicit declaration of function itoa.原因是itoa()并不在C语言标准库里。所以要采用sprintf()
程序:
/*** Return an array of size *returnSize.
* Note: The returned array must be malloced, assume caller calls free().
*/
char** fizzBuzz(int n, int* returnSize) {
char **temp;
int i=0,m=16;
temp=(char **)malloc( n*sizeof(char *) ); //分配n行
for(i=0;i<n;i++ )
{
temp[i]=(char *)malloc( m*sizeof(char) ); //为每行分配m个数据空间
}
for(i=0;i<n;i++)
{
if((i+1)%15==0)
*(temp+i)="FizzBuzz";
else if((i+1)%3==0)
*(temp+i)="Fizz";
else if((i+1)%5==0)
*(temp+i)="Buzz";
else
sprintf(*(temp+i), "%d", i+1);
}
*returnSize=n;
return temp;
}