首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

return 返回指针有关问题

2012-09-18 
return 返回指针问题C/C++ code#include stdio.h#include string.hchar *my(char *f1, int n){int len

return 返回指针问题

C/C++ code
#include <stdio.h>#include <string.h>char *my(char *f1, int n){    int len=strlen(f1);    char temp[15];     char *p1;    strcpy(temp,f1+len-n);    strcpy(temp+n,f1);    temp[len]='\0';    p1=temp;    return p1;}int main(){    char *p="5466565655";    char *p1;    p1=my(p,3);----------------------    printf("%s\n",p1); -------------这样就不能输出?----------------------    for(。。。。)   {        printf("%c",*p);----------这样可以输出?    }-----------------------    return 0;}


谁解释上面两种情况的具体。。O(∩_∩)O谢谢

[解决办法]
看这一段代码
char* x(void)
{
char* p="123456";
return p;
}
void main()
{
char *pi=x();
int x=pi;
printf("%s",x);
}
汇编代码如下
; Listing generated by Microsoft (R) Optimizing Compiler Version 15.00.21022.08 

TITLEE:\vc2008\t.c
.686P
.XMM
include listing.inc
.modelflat

INCLUDELIB LIBCMT
INCLUDELIB OLDNAMES

_DATASEGMENT
$SG733DB'123456', 00H
_DATAENDS
PUBLIC_x
; Function compile flags: /Odtp
_TEXTSEGMENT
_p$ = -4; size = 4
_xPROC
; File e:\vc2008\t.c
; Line 2
pushebp
movebp, esp
pushecx
; Line 3
movDWORD PTR _p$[ebp], OFFSET $SG733
; Line 4
moveax, DWORD PTR _p$[ebp]
; Line 5
movesp, ebp
popebp
ret0
_xENDP
_TEXTENDS
PUBLIC_main
; Function compile flags: /Odtp
_TEXTSEGMENT
_pi$ = -4; size = 4
_mainPROC
; Line 7
pushebp
movebp, esp
pushecx
; Line 8
call_x
movDWORD PTR _pi$[ebp], eax
; Line 9
xoreax, eax
movesp, ebp
popebp
ret0
_mainENDP
_TEXTENDS
END
可以看出x函数退出后将常量字符串123456的地址以返回值DWORD PTR _p$[ebp]
存入eax后退出
然后我们看到通过eax仍然可以得到完整的字符值 但是由于eax是char指针 所以只能从常量区取到一个char类型值 即一个字母
那么通过指针类型转换能不能得到完整的值呢 看以下代码
char* x(void)
{
char* p="123456";
return p;
}
void main()
{
char *pi=x();
printf("%s",(int)pi);
}
完整的输出了字符串值 因此答案已经很明了了

热点排行