#include<stdio.h>
void free(int i)
{
if(i!=0)
i=0;
}
int main()
{
int i,a[5]={1,2,3,4,5};
free(a[2]);
i=a[2];
printf("%d\n",i);
}
結果是3,為什么不是0呢?是不是形參和實參的知識?
uj5u.com熱心網友回復:
也可以說是形參實參的知識(形參只是實參的拷貝),還涉及傳值和傳地址的知識uj5u.com熱心網友回復:
因為i是free函式里的區域變數,而非全域或main函式里的變數。區域變數不能把i=0的值傳到main函式里。uj5u.com熱心網友回復:
1樓說的有道理,這是值傳遞還是地址傳遞的問題,可以改成void free(int *p)
{
if (*p != 0) {
*p = 0;
}
}
uj5u.com熱心網友回復:
那如果是這樣呢?
#include<stdio.h>
void free(int m)
{
if(m!=0)
m=0;
}
int main()
{
int i,a[5]={1,2,3,4,5};
free(a[2]);
i=a[2];
printf("%d\n",i);
}
uj5u.com熱心網友回復:
一樣的,free里的m已經不是main里的m了,free里的形參m是free函式里的區域變數,但是可以這樣做:
void free(int *m)
{
if(*m!=0)
*m=0;
}
這樣定義free就可以了,即傳實參的地址到free里。
uj5u.com熱心網友回復:
https://blog.csdn.net/yinzewen123/article/details/80532886?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159920883319725222423450%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=159920883319725222423450&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v3~pc_rank_v3-3-80532886.pc_ecpm_v3_pc_rank_v3&utm_term=%E5%87%BD%E6%95%B0%E4%B8%8D%E8%83%BD%E8%BF%94%E5%9B%9E%E6%A0%88%E5%8F%98%E9%87%8F%E7%9A%84%E6%8C%87%E9%92%88&spm=1018.2118.3001.4187你可以看一下這個鏈接,最根本的應該是堆疊記憶體的原因
uj5u.com熱心網友回復:
void free(int i){
if(i!=0)
i=0;
}函式呼叫完,變數i宣告周期也就結束了,因為i是堆疊記憶體的變數,所以使用完之后也就是未知啦,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/8155.html
標籤:C語言
下一篇:八數碼問題:逆序數相同一定有解?
