下述程序有什么问题?
生活随笔
收集整理的這篇文章主要介紹了
下述程序有什么问题?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
下述程序有什么問題?
#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; ??
}?
#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; ??
}?
總結
以上是生活随笔為你收集整理的下述程序有什么问题?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如果有一个类是 myClass , 关于
- 下一篇: Which of the followi