程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 跨函數使用內存

跨函數使用內存

編輯:關於C語言

1.要想通過無返回值的函數來修改實參的值,必須傳遞地址

void f(int* p)

{

*p = 100;

}


int main()

{

int a = 9;

f(&a);//無論是什麼類型的變量,此處必須傳遞地址才可通過函數修改其值。表示p = &a,那麼*p就等價於a

printf("a = %d\n", a);

return0;

}

2.跨函數使用內存

題目:下程序中,能夠通過調用函數fun,使main函數中的指針變量p指向一個合法的整型單元的是

A main()

{

int* p;

fun(p);//此處沒傳遞p的地址,所以肯定錯誤

...

}

int fun(int* q)

{

int s;

q = &s;

}


B main()

{

int* p;

fun(&p);

...

}

int fun(int** q)

{

int s;

*q = &s;

}

//看似正確,其實錯誤。p的地址傳給了q,則*q就等價於p,p指向了s,但是變量s只在fun函數內部有效,fun函數執行完後,s這塊內存就被釋放,不是一個合法的整型單元


C main()

{

int* p;

fun(&p);

...

}

int fun(int** q)

{

*q = (int*)malloc(sizeof(int));//正確,malloc分配的內存必須由free進行主動釋放

}


D main()

{

int* p;

fun(p);//沒加取地址,直接判斷錯誤

...

}

int fun(int* q)

{

q = (int*)malloc(sizeof(int));

}


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved