M
MN
How to store the function's result into variable in this case?
My code is like this::
#include <stdio.h>
#include <stdlib.h>
extern int* var1;
int* function(int in1, int in2);
int* var1 =NULL;
int* view_var1 =NULL;
int main ()
{
int i = 0;
//extern int* view_var1;
int in1 = 5;
int in2 = 10;
/* if (view_var1 != NULL) */
/* free(view_var1); */
/* view_var1 = (int*)malloc (sizeof(int*)* in2); */
/* view_var1 = function(in1, in2); */
function(in1, in2);
for (i = 0; i < in2; i++)
{
if (i == 0)
//printf("- %d\n", &view_var1);
printf("- %d\n",var1);
else
//printf("%d %d\n", i-1, &view_var1);
printf("%d %d\n", i-1, var1);
}
return 0;
}
int* function(int in1, int in2)
{
int i = 0;
if (var1 != NULL)
free(var1);
var1 = (int*)malloc (sizeof(int*)* in2);
for (i = 0; i < in2; i++)
{
if (i == 0)
var1 = 0;
else
{
if (i == 1)
var1= 1;
else
var1 = var1[i-1]*2+in1;
}
}
return (var1[in2]);
}
The right result must be :
- 0
0 1
1 7
2 19
3 43
4 91
5 187
6 379
7 763
8 1531
But if I activate lines that use view_var1, I get a result (which is
wrong) like this:
- 0
0 4
1 8
2 12
3 16
4 20
5 24
6 28
7 32
8 36
Also how to do in order to avoid these warning?
test.c:26: warning: return makes pointer from integer without a cast
test.c:56: warning: format ‘%d’ expects type ‘int’, but argument 2 has
type ‘int *’
My code is like this::
#include <stdio.h>
#include <stdlib.h>
extern int* var1;
int* function(int in1, int in2);
int* var1 =NULL;
int* view_var1 =NULL;
int main ()
{
int i = 0;
//extern int* view_var1;
int in1 = 5;
int in2 = 10;
/* if (view_var1 != NULL) */
/* free(view_var1); */
/* view_var1 = (int*)malloc (sizeof(int*)* in2); */
/* view_var1 = function(in1, in2); */
function(in1, in2);
for (i = 0; i < in2; i++)
{
if (i == 0)
//printf("- %d\n", &view_var1);
printf("- %d\n",var1);
else
//printf("%d %d\n", i-1, &view_var1);
printf("%d %d\n", i-1, var1);
}
return 0;
}
int* function(int in1, int in2)
{
int i = 0;
if (var1 != NULL)
free(var1);
var1 = (int*)malloc (sizeof(int*)* in2);
for (i = 0; i < in2; i++)
{
if (i == 0)
var1 = 0;
else
{
if (i == 1)
var1= 1;
else
var1 = var1[i-1]*2+in1;
}
}
return (var1[in2]);
}
The right result must be :
- 0
0 1
1 7
2 19
3 43
4 91
5 187
6 379
7 763
8 1531
But if I activate lines that use view_var1, I get a result (which is
wrong) like this:
- 0
0 4
1 8
2 12
3 16
4 20
5 24
6 28
7 32
8 36
Also how to do in order to avoid these warning?
test.c:26: warning: return makes pointer from integer without a cast
test.c:56: warning: format ‘%d’ expects type ‘int’, but argument 2 has
type ‘int *’