转了个圈,又回来了
分类: 嵌入式
2009-11-24 20:00:21
void Test(void)
{
char *str = NULL;
GetMemory(str);
strcpy(str, "hello world");
printf(str);
}
void Test(void)
{
char *str = NULL;
GetMemory(&str);
strcpy(str, "hello world");
printf(str);
free(str);
}
这样改的就是指向指针的指针的值了。
总结:在函数参数中,看是要改指针指向的内容,还是改指针本身,而改指针本身的地方就要特别注意了,他是能反映到参数上面的。这个时候可以加一层指针。
至于引用,C++ 中一般都用引用就可以了,C 中没有引用,就使用指针。引用就是给一个变量起了个别名而已。相当于同一个地址空间的两个不同的名字而已。
void function(int &refval)
{
refval=100;
}
int main()
{
int x=200;
function(x);
return 0;
}
void Test(void)
{
char *str = NULL;
str = GetMemory();
printf(str);
}
这个例子同上面的道理是一样的,返回的p同样是在栈空间里分配的数组。
2.4返回全局变量指针
char *GetMemory(void)
{
char *p = "hello world";
return p;
}
void Test(void)
{
char *str = NULL;
str = GetMemory();
printf(str);
}
上面的空间有可用,因为p指向的是个常量,是个全局变量。同理对上面的一个改成
static char p[] = "hello world";
也是可以的,因为static变量存放在全局区
2.6返回堆指针
char *GetMemory(void)
{
char *p = (char*)malloc(num);
return p;
}
void Test(void)
{
char *str = NULL;
str = GetMemory();
free(str);
}
上面的函数也可以,因为返回的空间是在堆空间里分配。
总结:函数的返回值,如果是值,是可以的。如果返回的是地址,那就要注意了,要看返回的地址是在栈里分配的,还是在堆,全局区里。