getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
基本上取一个整数并返回其正方形的整数数组。 (以上作品)
如果没有malloc或指针,我该怎么做?
#include <stdio.h>
#include <stdlib.h>
int *squares(int max_val) {
int *result = malloc(max_val * sizeof(int));
int i;
for(i = 1; i <= max_val; i++) {
result[i-1] = i*i;
}
return(result);
}
int main() {
int *sq = squares(10);
int i;
for(i = 0; i < 10; i++) {
printf("%d\t", sq[i]);
}
printf("\n");
return(0);
}
由于函数调用而导致错误。这可能吗?或者我们必须用指针做到这一点?
答案 0 :(得分:0)
此
int[] squares(int max_val) {
int result[max_val];
int i;
for(i = 1; i <= max_val; i++) {
result[i-1] = i*i;
}
return(result);
}
无效C:
a.c:3:4: error: expected identifier or ‘(’ before ‘[’ token
int[] squares(int max_val)
应该是
int *squares(int max_val) {
...
}
将它放在一边,你的第二个squares
返回一个指向本地数组的指针。
一旦squares
结束它的执行,这个数组就不再存在,所以你是
返回一个指针,它返回时会变为无效。
另外
int sq[] = squares(10);
也是无效的C
a.c:9:13: error: invalid initializer
int sq[] = squares(10);
^~~~~~~
您无法为数组指定函数值。正确的 版本是
int *sq = squares(10);
因此,如果您不希望squares
为结果分配带malloc
的内存,那么您可以
要么在main
中分配内存,要么在main中创建一个数组并将其传递给
squares
:
int squares(int *result, int max_val) {
if(result == NULL || max_val <= 0)
return 0;
int i;
for(i = 1; i <= max_val; i++) {
result[i-1] = i*i;
}
return 1;
}
// version 1
int main() {
int *sq = malloc(10 * sizeof *sq);
// NEVER forget to check the return value of malloc
if(sq == NULL)
{
fprintf(stderr, "not enough memory\n");
return 1;
}
squares(sq, 10);
int i;
for(i = 0; i < 10; i++) {
printf("%d\t", sq[i]);
}
printf("\n");
free(sq); // NEVER forget to free
return 0;
}
// version 2
int main() {
int sq[10];
squares(sq, sizeof sq / sizeof sq[0]);
int i;
for(i = 0; i < 10; i++) {
printf("%d\t", sq[i]);
}
printf("\n");
return 0;
}
答案 1 :(得分:0)
这样的事情怎么样??
#include <stdio.h>
#include <stdlib.h>
void squares(int values[], int max_val) {
for(int i = 1; i <= max_val; i++) {
values[i - 1] = i * i;
}
}
int main() {
int sq[10];
squares(sq, 10);
int i;
for(i = 0; i < 10; i++) {
printf("%d\t", sq[i]);
}
printf("\n");
return(0);
}