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

指標和陣列

#include<stdio.h>

int main()
{
    int a;
    int *p=&a;
    printf("請輸入一個整數:");
    scanf("%d",&a);
    printf("a=%d\n",a);

    printf("請再輸入一個整數:");
    scanf("%d",p);
    printf("a=%d\n",a);

    return 0;
}

結果:

請輸入一個整數:3
a=3
請再輸入一個整數:5
a=5

#include<stdio.h>

int main()
{
    char
str[128]; printf("請輸入魚C的域名:"); scanf("%s",str); printf("魚C工作室的域名是:%s\n",str); return 0; }

結果

請輸入魚C的域名:fishc.com
魚C工作室的域名是:fishc.com

scanf中的str沒寫&,因為陣列名就是一個地址資訊

陣列名其實是陣列第一個元素的地址!

#include<stdio.h>

int main()
{
    char str[128];
    printf("str的地址是:%p\n",str);
    printf(
"str的地址是:%p\n",&str[0]); return 0; }

結果

str的地址是:000000000061FDA0
str的地址是:000000000061FDA0

地址一樣!

字元陣列,每一個元素都是一個字元,訪問字元的地址,當然要用&。

第二個元素的地址應該是第一個地址加上它所佔用的空間

#include<stdio.h>

int main()
{
    char a[]="Fishc";
    int b[5]={1,2,3,4,5};
    float c[5]={1.1,2.2,3.3,4.4,5.5};
    double d[5]={1.1,2.2,3.3,4.4
,5.5}; printf("a[0]:%p,a[1]:%p,a[2]:%p\n",&a[0],&a[1],&a[2]); printf("b[0]:%p,b[1]:%p,b[2]:%p\n",&b[0],&b[1],&b[2]); printf("c[0]:%p,c[1]:%p,c[2]:%p\n",&c[0],&c[1],&c[2]); printf("d[0]:%p,d[1]:%p,d[2]:%p\n",&d[0],&d[1],&d[2]); return 0; }

結果

a[0]:000000000061FE1A,a[1]:000000000061FE1B,a[2]:000000000061FE1C
b[0]:000000000061FE00,b[1]:000000000061FE04,b[2]:000000000061FE08
c[0]:000000000061FDE0,c[1]:000000000061FDE4,c[2]:000000000061FDE8
d[0]:000000000061FDB0,d[1]:000000000061FDB8,d[2]:000000000061FDC0

可發現它的規律的確是這樣

指向陣列的指標:

#include<stdio.h>

int main()
{
    char a[]="fishc";
    char *p=a;
    printf("*p=%c,*(p+1)=%c,*(p+2)=%c\n",*p,*(p+1),*(p+2));
    return 0;
}

結果

*p=f,*(p+1)=i,*(p+2)=s

也可以不用指標,直接這樣也可以

#include<stdio.h>

int main()
{
    char a[]="fishc";
    printf("*a=%c,*(a+1)=%c,*(a+2)=%c\n",*a,*(a+1),*(a+2));
    return 0;
}

結果一樣

還可以用指標直接定義字串,然後用下標法讀取每一個元素,倒過來,

#include<stdio.h>
#include<string.h>

int main()
{
    char *str="I love FishC.com!";
    int i, length;

    length=strlen(str);
    for(i=0;i<length;i++)
    {
        printf("%c",str[i]);
    }
    printf("\n");
    return 0;
}

結果

I love FishC.com!

還可以簡潔點

#include<stdio.h>
#include<string.h>

int main()
{
    char *str="I love FishC.com!";
    int i;
    for(i=0;i<strlen(str);i++)
    {
        printf("%c",str[i]);
    }
    printf("\n");
    return 0;
}