1.在main方法裡面直接定義一個非常大的數組的時候,可能會出現棧溢出:錯誤代碼示範:
#include<stdio.h>
#include<stdlib.h>
void
main()
{
int
a[1024 * 1024];
num = 100;
system("pause");
}
錯誤截圖:
2.在定義數組的時候要定義數組的長度,否則會出現錯誤。(特例:在gcc編譯器下,不會出現錯誤(因為标準不一樣))。
3.列印并且指派的是:
for (int
i = 0;
i <
length;i++)
printf("%d\n",a[i]
= i);
//初始數組并列印
4.記憶體配置設定可以通過三個函數實作
a.void *malloc(size_t size):malloc隻管配置設定,不初始化内容(size:bytes
to allocate:配置設定的位元組數)。
b.void *calloc(size_t,size_t size):配置設定記憶體,并且初始化記憶體資訊為0,其有兩個參數(num:number
of elements;size:length in bytes of each element),第一個參數是,開辟的數量,第二個參數是每個參數的大小。
c.void *realloc(void *memblock,size_t size);reallocatememory blocks;用于配置設定記憶體.
memblock:pointer to previously alloctedmemory block;
size:new size in bytes
例如:
int *p1 = (int*)malloc(sizeof(int)*10);//隻管配置設定,不初始化
int *p2 = (int*)calloc(10,sizeof(int));//calloc會進行記憶體清零
例子:
#include
<stdlib.h>
main(int
argc,
char *argv[])
//隻管配置設定
int *p1
= (int *)malloc(sizeof(int)*
10);
//calloc會進行記憶體清零
int *p2
= (int *)calloc(10,
sizeof(int));
printf("%p,%p",
p1,
p2);
i < 10;
i++)
p1[i]
= i;
p2[i]
getchar();
return 0;
5.realloc配置設定記憶體
<stdio.h>
//配置設定記憶體
int *p
= (int *)calloc(10,sizeof(int));
printf("%p\n",
p);//輸出位址
i;
for (i
= 0; i < 10;i++)
//*(p + i)等價于p[i]
*(p +
i) =
//變長,第一個參數是指針位址,第二個參數表示的是數組的個數
int *pnew
= (int *)realloc(p,100000);
//realloc.第一種情況,後面的記憶體沒有用,就直接擴充變長
//第二種情況,後面的記憶體有人用,先配置設定新的長度,拷貝原來原來的記憶體,釋放原來的記憶體
printf("%p",pnew);
i = 10;
i < 25000;i++)
*(pnew +
6.建立項目dlllib
編寫代碼:
go()
printf("hello
world\n");
7.制作dll,右擊項目à屬性à配置屬性à正常à分别修改配置類型(動态庫.dll)和目标檔案名。
8.制作lib,右擊項目à屬性à配置屬性à正常à分别修改配置類型(動态庫.lib)和目标檔案名。
9.引入lib.lib的方式有
a:将.lib拷貝到源代碼所在的目錄下。à通過代碼引入.lib。代碼是:
#pragma comment(lib,”test.lib”); //其中test.lib就是要引入的.lib靜态庫(注意,也要将靜态庫對應的.h放到源檔案所在的位置)。
b:将.lib拷貝到源代碼所在的目錄下。à通過配置的方式引入靜态庫。方式是:
右擊項目à屬性à配置屬性à輸入à附加依賴項(如現有依賴項添加的方式添加.lib靜态庫)。