关于c语言中返回值和返回指针的问题。
2012-04-28 21:16
435 查看
关于c语言中返回值和返回指针的问题。
int testA (void) { int b = 1 ; return b ; } char * testB (void) { char str[] = "abc" ; return str ; } int main() { printf( " the value of testA is %d n", testA() ) ; printf( " the value of testB is %c ", *( testB() ) ) ; }
对于返回值的情况:
testA与main函数同在栈区,testA结束时C++创建临时变量,然后将返回值复制给该临时
变量。
printf( " the value of testA is %d n", testA() ) 时输出的是该临时变量的值,testA中的b已经不存在。
对于返回指针的情况:
这是最复杂的部分。首先,对于上面的情形:返回一个数组的首地址,由于是返回char *
类型,所以C++会首先创建一个char *类型的临时变量,再把该数组的首地址赋给临时变量;
函数结束后该数组也就被销毁,这就意味着临时变量指向了一个“未声明的地址”,幸运的情况下,这段内存暂时还没有被其他的数据所覆盖,因此还能输出正确的内容。
在testB里面,如果换成char* str="abc";return str; 由于这时str指向的是全局数据区的一段内存地址,所以函数结束后临时变量也指向该地址,所以编译器不会提出警告。但这样的方法是不推荐的。
返回引用:
这中情况的效率最高,它直接返回一个对象,不产生返回值的副本。但同时也要注意避免返回局部引用的情况。
相关文章推荐
- 关于c语言字符串中sizeof指针的问题
- 小小的C语言问题指针数组赋值----关于指针和数组。
- <C语言>关于函数返回值是指针,取不到值的问题研究
- 引用与指针关于变量返回值的问题4个swap
- 关于c语言中double指针的初始化问题
- 关于C语言指针的问题
- 转载关于char的c语言指针问题:char **s char *a [ ] char a [ ]
- C语言中关于返回指针的函数和指向函数的指针
- 关于C语言指针赋值的问题详解
- c语言链表 关于指针参数调用问题
- 关于64位机指针返回截短问题
- 关于C语言字符数组、字符串和指针的相关问题
- 关于C语言的文件型指针和移位操作中的一些有趣问题的探讨
- [C语言]关于运用指针的问题。
- 【转】关于64位机指针返回截短问题
- 关于C语言野指针的问题
- C语言---关于char型数组和char型指针的问题
- c语言初学-关于指针作为参数并改变它的值的问题
- 关于c语言用双重指针在无需返回的情况下于函数中创建链表的一点小小发现
- 关于C语言数组利用指针排序的问题