C語言實現動態陣列
阿新 • • 發佈:2018-11-16
採用C程式碼使用輾轉相除法實現RSA演算法的私鑰D計算時,根據φ(n)和e的不同在輾轉相除的次數不同,產生的商和餘數就不同,因此存放商和餘數的陣列需要是動態變化的。但是C語言本身無法定義動態陣列(C#、Python等可以通過List.Append方式實現),因此記錄一個C語言實現動態陣列的方法,其核心思想就是malloc一塊記憶體,轉換成期望的指標型別,那麼就可以該指標通過動態往這個記憶體中存資料了。
轉載自:https://blog.csdn.net/qq_28234213/article/details/72510425
感謝分享>_<
一維動態陣列C語言實現
#include< stdio.h>
#include<stdlib.h>//要使用malloc是要包含此標頭檔案
#include <memory.h>//要使用memset是要包含此標頭檔案
int main()
{
int m;
scanf("%d", &m);//scanf只是遇到回車符的時候結束,並沒有把回車符輸入,因此輸入流中還有一個回車符
getchar();//把輸入流中的回車符讀走
int *p;
p = (int*)malloc(m*(sizeof(int)));//動態申請記憶體
memset(p, 0, m);//初始化,每個元素都為零
int i;
for (i=0;i<m; i++)//陣列賦值
{
p[i] = i;
}
for (i = 0; i <m; i++)//列印陣列
{
printf("%d,", p[i]);
}
free(p);//釋放記憶體,malloc和free一定要記得成組使用,不然會導致程式吃記憶體
getchar();//讓程式停頓,觀察輸出
return 0;
}
二維動態陣列C語言實現
#include <stdio.h>
#include < stdlib.h>//要使用malloc是要包含此標頭檔案
#include <memory.h>//要使用memset是要包含此標頭檔案
int main()
{
int m, n;
scanf("%d%d", &m,&n);//scanf只是遇到回車符的時候結束,並沒有把回車符輸入,因此輸入流中還有一個回車符
getchar();//把輸入流中的回車符讀走
int **p;
p = (int**)malloc(m*(sizeof(int*)));//二級指標所在地址申請記憶體
int i, j;
for (i = 0; i<m; i++)
p[i] = (int*)malloc(sizeof(int)*n);//一級指標所在地址申請記憶體
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
p[i][j] = i + j;
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
printf("%d %p ", p[i][j], &p[i][j]); //輸出每個元素及地址,每行的列與列之間的地址時連續的,行與行之間的地址不連續
}
printf("\n");
}
for (i = 0; i < m; i++) free(p[i]);
free(p);
getchar();//讓程式停頓,好看到輸出
return 0;
}