1. 程式人生 > 其它 >指標陣列和陣列指標

指標陣列和陣列指標

計算字串裡的字元個數,不要sizeof和strlen

#include<stdio.h>

int main()
{
    char str[]="I love FishC.com!";
    char *target=str;
    int count=0;
    
    while(*target++!='\0')
    {
        count++;
    }
    printf("總共有%d個字元!\n",count);
    return 0;
}

結果

總共有17個字元!

因為陣列名是不可變的,不能為左值,所以要定義一個指標

指標變數是一個左值,而字串變數是一個地址常量,不是一個左值

指標陣列

#include<stdio.h>

int main()
{
    int  a=1;
    int  b=2;
    int  c=3;
    int  d=4;
    int  e=5;

    int *p1[5]={&a,&b,&c,&d,&e};
    int i;

    for(i=0;i<5;i++)
    {
        printf("%d\n",*p1[i]);
    }
    return 0;
}

結果

1
2
3
4
5

備註:因為陣列元素存放指標,所以要用取地址

#include<stdio.h>

int
main() { char *p1[5]={ "讓程式設計改變世界", "just do it", "一切皆有可能", "gogogogo", "one more thing" }; int i; for (i=0;i<5;i++) { printf("%s\n",p1[i]); } return 0; }

結果

讓程式設計改變世界
just do it
一切皆有可能
gogogogo
one more thing

備註:p1前不加*,加了表示取出字元,但我要的是字串,給出字串的地址

陣列指標

錯誤寫法

#include<stdio.h>

int main()
{
    int (*p2)[5]={1,2,3,4,5};
    int i;

    for(i=0;i<5;i++)
    {
        printf("%d\n",*(p2+i));
    }
    return 0;
}

(因為它是指標,要給它地址才行)

以前學指標是這樣寫的

#include<stdio.h>

int main()
{
    int temp[5]={1,2,3,4,5};
    int *p=temp;
    int i;
    for(i=0;i<5;i++)
    {
        printf("%d\n",*(p+i));
    }
    return 0;
}

這裡*p指向的是變數,而陣列指標是指向陣列,有所不同

#include<stdio.h>

int main()
{
    int temp[5]={1,2,3,4,5};
    int (*p2)[5]=&temp;
    int i;

    for(i=0;i<5;i++)
    {
        printf("%d\n",*(*p2+i));
    }
    return 0;
}

可以不寫&