重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
如果要獲取內存地址,你上面那種函數獲取方法是錯誤的.函數中int *a僅僅是主函數變量ff的一個副本,ff當初沒有具體指明地址,傳遞給a也是不確定地址,a分配完畢,只是修改a自身指向,并不修改ff指向.所以用下面方法進行修改,采用返回地址方法
成都創新互聯公司專業為企業提供沈丘網站建設、沈丘做網站、沈丘網站設計、沈丘網站制作等企業網站建設、網頁設計與制作、沈丘企業網站模板建站服務,10年沈丘做網站經驗,不只是建網站,更提供有價值的思路和整體網絡服務。
#include stdio.h //包含頭文件
#include stdlib.h
int *array1(int x)//使用返回指針能正確分配內存地址
{
int *a;
a=(int*)malloc(sizeof(int)*x);
if(a==NULL)
exit(0);
for(int i=0;ix;i++)
*(a+i)=0;
return a;
}
void main()
{
int *array1(int x);//函數聲明與函數定義相一致
int *ff;
int sdof;//定義sdof
sdof=8;
ff = array1(sdof);
for(int i=0;isdof;i++)
printf("%d\n",*(ff+i));
}
數組大小定義在編譯連接階段就已經決定了,所以你不能在程序執行的時候,采用動態賦值的方法來決定數組大小。
如果想要動態定義一個指定大小的內存,可以采用malloc或者realloc的函數來進行分配。
比如我們可以int a =XXXX之類,然后malloc(a)分配xxxx個字節大小的內存使用。
C語言可以通過宏,在你需要的位置宏展開出一個新的函數。
例如:
#define XXX(funcname) \
int funcname (int arg1, int arg2) \
{ return arg1 + arg2; }
但這也是編譯期就決定好了的,也不能實現運行期動態創建。