2.2.3指針

指針是C語言中很是重要的概念,也是C語言的特點之一。數組

定義指針變量的通常形式爲:函數

    類型名  *指針變量名spa

例如,下列語句定義了指向float類型的指針變量p。3d

    float  *p;指針

指針用於存放變量的地址。code

指針被定義後,必須將指針和一個特定的變量進行關聯後,才能夠使用指針,也就是說,指針變量要先賦值才能使用,固然指針變量被賦的值應該是地址。blog

 

指針的基本運算內存

指針能夠同整數進行加減操做,例如,若是變量p是指向float類型變量的指針,那麼表達式p+i表明了從p這個位置開始的第i個float類型變量的地址。io

 

#include<stdio.h>
void Print(int *a)
{
    for(int i=0;i<10;i++)
        printf("%d ",a[i]);
    printf("\n");
}
int main()
{
    int a[10]={1,2,3,4,5,6,7,8,9,0};
    Print(a);
    int *c=a;//a是數組a的地址 
    printf("%d\n",*c);
    printf("%d\n",*c+1);//+1
    printf("%d\n",*c+2);//+2 
    return 0;
 } 

 

 

 

指針與數組class

1.在C語言中,數組名自己就是數組的基地址,即第1個元素(下標爲0)的地址。

2.在函數定義中,被聲明爲數組的形參其實是一個指針。當傳遞數組時,按值調用傳遞它的基地址,數組元素 自己不被複制。

3.數組名做爲函數的實參,在被調用函數中,就能訪問實參數組所在的存儲單元,不但能夠引用,還能改變這些單元的內容。返回主調函數後,相應數組元素的值就改變了。

 

#include<stdio.h>
void Print(int *a)
{
    for(int i=0;i<10;i++)
        printf("%d ",a[i]);
}
int main()
{
    int a[10]={1,2,3,4,5,6,7,8,9,0};
    Print(a);
    return 0;
 } 

 

用指針實現內存動態分配

 在動態存儲方面C語言提供了一組標準函數,定義在<stdlib.h>裏面,主要有:

1.動態存儲分配函數void *malloc(size):在內存的動態存儲區分配一連續空間其長度爲size。

若申請成功,則返回一個指向所分配內存空間的起始地址;若申請內存空間不成功,則返回NULL(值爲0)。

該函數的返回值爲(void *)類型,在具體使用中,須要將malloc的返回值轉換到特定指針類型,並賦給一個指針變量。

2.動態存儲釋放函數void free(void *ptr):釋放由動態分配函數申請到的整塊內存空間,ptr爲指向要釋放空間的首地址。

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int *p=(int *)malloc(sizeof(int));
    printf("%d\n",p);//地址 
    scanf("%d",p);//向p指向的內存中寫入數據 
    printf("%d",*p);//使用間接訪問運算符*訪問p中的數據 
    free(p);//釋放 
    return 0;
 } 

相關文章
相關標籤/搜索