最近用C51写程序,碰到点问题.
函数返回值是结构体指针类型的,则输出不正确.. 如果是返回结构体类型的,结果正确.. 下面是我写来做试验的程序..
#include <reg52.h> #include <stdio.h>
struct test { int a; int b; };
//返回结构体的试验函数 struct test * func1(void); //不行 struct test func3(void); //行
//返回数组的试验函数 int * func8(int a[]); //行 int * func9(void); //不行 void func10(int a[]); //行
main() { struct test * tt; struct test tt1; int aa[2]; int *a; int x,y;
SCON = 0x52; /* SCON */ /* setup serial port control */ TMOD = 0x20; /* TMOD */ /* hardware (2400 BAUD @12MHZ) */ TCON = 0x69; /* TCON */ TH1 = 0xf3; /* TH1 */
tt = func1(); //tt->a = 11, tt->b = 22 x = tt->a; //但这里 x,y取得的值不正确 x = 0 y = tt->b; // x = 12, y = 12 printf("%d
", tt->a); //print 11 printf("%d
", tt->b); //打印完11后 tt1里面的a,b的值就变了~
tt1 = func3(); //tt1.a = 31, tt1.b = 32 printf("%d
", tt1.a); // print 31 printf("%d
", tt1.b); // print 32
a = func8(aa); // printf("%d
", *a); printf("%d
", *(a+1));
a = func9(); // x = *a; y = *(a + 1); printf("%d
", *a); printf("%d
", *(a+1));
func10(aa); // printf("%d
", aa[0]); printf("%d
", aa[1]);
return; }
struct test * func1(void) { struct test t1; t1.a = 11; t1.b = 12; return &t1; }
struct test func3(void) { struct test t1; t1.a = 31; t1.b = 32; return t1; }
还有就是要返回数组变量的问题. 数组变量是不能直接作为函数参数返回的,那么只能通过数组指针来返回了? 写了几个函数,将数组作为参数传入函数,返回值为void或者数组指针没问题. 当我在函数里面定义了一个数组,用数组指针返回时就不行了~这是什么原因?
//函数 int * func8(int a[]) { a[0] = 81; a[1] = 82; return a; }
int * func9(void) { int a[2]; a[0] = 91; a[1] = 92; return a; }
void func10(int a[]) { a[0] = 101; a[1] = 102; return; }
|