日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

下述程序有什么问题?

發布時間:2025/6/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 下述程序有什么问题? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
下述程序有什么問題?
#include<string.h>
#include<stdio.h>?
#include<stdlib.h>?

void getmemory(char*p) ?
{ ? ?? ??
p=(char *) malloc(100); ? ?
strcpy(p,"hello world"); ?

} ?

int main( )?
{ ? ?
? ?
?char *str=NULL; ? ?
?getmemory(str); ?
?printf("%s\n",str); ??
?free(str); ? ?
?return 0; ??
}
解析:
1.getmemory 函數中對于指針的值來說是值傳遞,也就是說函數定義了一個臨時變量p,p的值與str的值相同,都指向同一個地址,但是在p=(char*) malloc(100);
這句中,系統開辟了另一個空間,p指向了這個新的空間,也就是說,p和str病不指向同一個地址了,那么,接下來對×p的操作也就和str無關了,所以str的值始終沒有變過,一直為null。
2.函數傳入的是指針p的一個副本,而實參str沒有真正被修改。因此輸出為空,main函數正常返回。
為使題目功能可行,
法一:按引用傳參
void getmemory(char* &p) ?
法二:使用指針的指針

#include<string.h>
#include<stdio.h>?
#include<stdlib.h>?
void getmemory(char** p)?
?{ ? ?
? ?
? *p=(char *) malloc(100);?
? ?
? ? strcpy(*p,"hello world");?
?
} ?

int main( )?
{ ? ?
char *str=NULL; ? ?
?
getmemory(&str); ? ?
??
printf("%s\n",str); ??
? ?
free(str); ? ?
? ?
return 0; ??

}?

總結

以上是生活随笔為你收集整理的下述程序有什么问题?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。