1. 程式人生 > 程式設計 >詳解C語言中的指標與陣列的定義與使用

詳解C語言中的指標與陣列的定義與使用

指標的特點

  • 他就是記憶體中的一個地址
  • 指標本身運算
  • 指標所指向的內容是可以操作的

作業系統是如何管理記憶體的

棧空間

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語言中的指標與陣列的定義與使用,希望對大家有所幫助!