詳解C語言中的指標與陣列的定義與使用
阿新 • • 發佈:2020-01-07
指標的特點
- 他就是記憶體中的一個地址
- 指標本身運算
- 指標所指向的內容是可以操作的
作業系統是如何管理記憶體的
棧空間
4M~8m的大小
當進入函式的時候會進行壓棧資料
堆空間
- 4g的大小 1g是作業系統
- 全域性變數
記憶體對映
- 可以對記憶體的內容修改修改硬碟的內容
- 一般在資料庫中經常使用
記憶體的分配與釋放
c語言分配記憶體的方法
// malloc(需要分配的大小); 這裡的分配的大小需要對齊的2的指數 void *mem = malloc(size);
釋放記憶體
// 一般分配的內容都是在堆空間中的 // 如果使用完不去釋放會照成記憶體洩漏和野指標的出現 free(men);
什麼是記憶體洩漏:
- 不斷的向系統
- 申請記憶體申請的記憶體不用,也不去釋放
- 絕對不允許記憶體洩漏
什麼是野指標
- 這個指標已經被釋放掉了
- 別人又建立了這個指標
- 過去的自己又用到了這個指標
函式指標
返回值型別(*指標變數名)(引數列表);
int func(int x); // 宣告一個函式 int (*f)(int x); // 宣告一個函式指標 f = func; // 將func函式的首地址賦值給指標f #include <stdio.h> int sum (int a,int b) { return (a+b); } int main(int argc,int *argv[]) { // 定義一個函式指標 int (*f) (int,int); // f 指向 sum函式 f = sum; // 執行f函式,相當於執行sum函式 int f_sum = f(2,3); printf("f_sum: %d\n",f_sum); return 0; }
指標就是記憶體地址: void*、 char*
陣列就是:char c[2]、 int arr[10],指連續相同型別的空間
#include <stdio.h> #include <stdlib.h> int main(int argc,char *argv[]) { // 定義兩個int型別的指標 int *a,*b; // 通過malloc在堆裡面開闢了空間 a = (int*)malloc(sizeof(int)); b = (int*)malloc(sizeof(int)); *a = 1; *b = 2; // 指標a的地址是&a,a是指向空間的地址,*a是指向空間的值 printf("addr of a:%p,%p,%d\n",&a,a,*a); printf("addr of b:%p,&b,b,*b); return 0; }
#include<stdio.h> #include<stdlib.h> int main(int argc,char *argv[]) { // 建立一個數組c裡面有3個數據,int型別的陣列一個數組佔4個位元組,地址相關的空間相差是1個位元組 int c[3] = {1,2,3}; printf("c的地址:%p\t%p\tc[0]:%p\tc[1]:%p\tc[2]:%p\t\n",c,&c,&c[0],&c[1],&c[2]); printf("%d,%d,c[0],c[1],c[2]); }
總結
以上所述是小編給大家介紹的C語言中的指標與陣列的定義與使用,希望對大家有所幫助!