C 指針初步認(rèn)識(二)

數(shù)組指針

一個(gè)變量有一個(gè)地址,一個(gè)數(shù)組包含若干元素,每個(gè)數(shù)組元素都在內(nèi)存中占用存儲單元,它們都有相應(yīng)的地址。
所謂數(shù)組的指針是指數(shù)組的起始地址,數(shù)組元素的指針是數(shù)組元素的地址。

定義一個(gè)指向數(shù)組元素的指針變量

int a[10];  //定義a為包含10個(gè)整型數(shù)據(jù)的數(shù)組
int *p;  //定義p為指向整型變量的指針
p=&a[0] //應(yīng)當(dāng)注意,因?yàn)閿?shù)組為int型,所以指針變量也應(yīng)為指向int型的指針變量。

把a(bǔ)[0]元素的地址賦給指針變量p。也就是說,p指向a數(shù)組的第0個(gè)元素。

1.png

C語言規(guī)定,數(shù)組名代表數(shù)組的首地址,也就是第0號元素的地址。

int a[10];
int *p;
// 第一種方式
p=&a[0];
p=a;

// 第二種方式
int *p=&a[0];

//這兩種方式是等價(jià)的

指針引用數(shù)組如果指針變量p已指向數(shù)組中的一個(gè)元素,
p+1指向同一數(shù)組中的下一個(gè)元素。
p-1指向同一數(shù)組中的前一個(gè)元素。

p = &a[0] // 指針p 指向數(shù)組首地址

//p+i  就是 a[i] 的地址,或者說它們指向a數(shù)組的第 i 個(gè)元素。
[/i]p+5 // 現(xiàn)在p往后移動5個(gè)元素,現(xiàn)在指向 a[5]的地址

// *(p+i)  就是 p+i  所指向的數(shù)組 a元素(的內(nèi)容)
*(p+5) // 就是a[5]的內(nèi)容

輸出數(shù)組

//使用下標(biāo)方法
#include <stdio.h>
int main(){
    int a[10], i;
    // 賦值
    for(i=0; i<10; i++)
        a=i;
    //打印     
    for(i=0;i<10;i++)
        printf("a[%d]=%d\n", i, a);
    return 0;
}
//使用計(jì)算元素的地址方法
#include <stdio.h>
int main(){
    int a[10], i;
    //賦值
    for(i=0; i<10; i++)
        *(a+i) = i;
        
    //打印
    for(i=0; i<10; i++)
        printf("a[%d]=%d\n", i, *(a+i));
    return 0;
}
//指針變量指向元素方法
#include <stdio.h>
int main(){
    int a[10], i, *p;
    p = a;
    //賦值
    for(i=0; i<10; i++)
        *(p+i) = i;
        
    //打印
    for(i=0; i<10; i++)
        printf("a[%d]=%d\n", i, *(p+i));
    return 0;
}

例子
判別一個(gè)整數(shù)數(shù)組中各元素的值,若大于0 則輸出該值,若小于等于0則輸出0值。

#include <stdio.h>

void nzp(int *a){
    int i;
    for(i=0; i<5; i++){
        if(a[i]<0) a[i]=0;  //小于0的元素,賦值為0
    }
}

int main(){
    int b[5], i;
    printf("Input 5 numbers:\n");
    for(i=0; i<5; i++)
        scanf("%d", &b[i]);
    printf("Initial values of array b are: ");
    for(i=0; i<5; i++)
        printf("%d ", b[i]);
    nzp(b);
    printf("\nFinal values of array b are: ");
    for(i=0; i<5; i++)
        printf("%d ",b[i]);

    return 0;
}

運(yùn)行結(jié)果:

Input 5 numbers:
1↙
3↙
-90↙
-23↙
100↙
Initial values of array b are: 1 3 -90 -23 100
Final values of array b are: 1 3 0 0 100

說明:

  1. 形參數(shù)組 和 實(shí)參數(shù)組類型必須一致
  2. 形參數(shù)組和實(shí)參數(shù)組的長度可以不同, 一般定義方法原型的參數(shù),可以允許不給出數(shù)組長度。如寫成 void nzp(int a[]), 當(dāng)然也可以 void nzp(int *a)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 指針是C語言中廣泛使用的一種數(shù)據(jù)類型。 運(yùn)用指針編程是C語言最主要的風(fēng)格之一。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu); ...
    朱森閱讀 3,615評論 3 44
  • 指針 指針是什么 為了了解指針的概念,我們先來看一個(gè)小故事。話說福爾摩斯派華生到威爾爵士居住的城堡去取回一個(gè)重要的...
    去留無意hmy閱讀 585評論 0 1
  • C語言指針的總結(jié) 1. 變量 不同類型的變量在內(nèi)存中占據(jù)不同的字節(jié)空間。 內(nèi)存中存儲數(shù)據(jù)的最小基本單位是字節(jié),每一...
    xx_cc閱讀 4,122評論 11 39
  • 那日,晨光熹微 相處的默契,逃不過分離 沒有再見,沒有道別 沒有聯(lián)系方式 甚至,忘了你的名字 唯在戚戚的風(fēng)里,就著...
    南山公子閱讀 282評論 4 8
  • 歷年來,天痕家族的后輩在圣靈學(xué)院能進(jìn)天才班的,也就寥寥幾十人而已。雖然進(jìn)不了天才班,并不代表沒有培養(yǎng)的價(jià)值了,但進(jìn)...
    im喵小姐閱讀 559評論 0 0

友情鏈接更多精彩內(nèi)容