指针和数组

#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;
}

 

指针和数组

上一篇:Leetcode - 33. 搜索旋转排序数组


下一篇:spring的事务传播机制