1.靜態變量
1.在程序執行只會被初始化一次 ,但是可以被多次賦值 2.在另外的文件中不能使用 ,static修飾的變量只能在本文件中使用
3.未初始化的 靜態變量與全局變量 初始值爲0 4.
#include<stdio.h>
#include<Windows.h>
extern int b=10;
void func(){
static int a=10;
printf("%d \n",a++); 10 11 12 13 14 15 16 17 18 19
}
void main(void) {
for (int i = 0; i < 10; ++i) {
func();
}
return; }
3.使用 extern 聲明,然後可以使用一個項目中的文件的變量(static除外)或者函數,
2.內存四塊模型
3.malloc 開闢堆內存
void main(void) {
char *p = malloc(sizeof(char)*10); 創建10個大小的堆內存
strcpy(p,"hello world");
char *p1 = "hello world";
char *p2 = "hello world";
printf("%p \n",p); 0000000002A01400
printf("%p \n",p1); 0000000000404000
printf("%p \n",p2); 0000000000404000
free(p);
return;
}
1.p1 和 p2都是字符常量區的字符串,所以地址一樣的, p是 malloc 函數 創建10個char類型大小的堆內存再拷貝的內存不一樣
2. memset(p,0,10); 使用memest重置一塊內存的值 參數: 目標 , 重置的值, 重置大小 上面是 1*10個 值最好是0
2.memest
可以重置棧空間中的數組值, 大小爲4 *5=20
int arr[] = {1,2,3,4,5};
memset(arr,0,20);
for (int i = 0; i < 5; ++i) {
printf("%d \n",arr[i]); 0 0 0 0 0
}
3.memcpy, memove
1.拷貝 一個內存中的值到另一個內存中去, 拷貝5個int類型的大小 ,拷貝重複的內存地址會報錯, 而memove不會報錯
2.memcpy拷貝結束標誌是看 個數, 而strcpy拷貝結束是以字符串 \0爲結尾
int arr[] = {1,2,3,4,5};
int *p = malloc(sizeof(int)*5);
memcpy(p,arr,20);
for (int i = 0; i < 5; ++i) {
printf("%d \n",p[i]); 1,2,3,4,5
}
4.memcmp
比較兩個內存中的值.可以指定個數比較. 相同返回0 不同返回-1
int arr[] = {1,2,3,4,5};
int arr2[] = {1,2,3,4,5};
int a =memcmp(arr,arr2,5); 0