指针数组和数组指针

计算字符串里的字符个数,不要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;
}

 可以不写&

posted @ 2021-09-01 15:14  好想成为一只鸟  阅读(43)  评论(0)    收藏  举报