C语言指针(2)数组与指针

先看实例:

代码2-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;
}
~        

输出信息:

请输入一个整数:1
a = 1
请输入一个新的整数:2
a = 2

scanf("%d", &a);

这句是让用户输入数据,然后放如a地址里面去。

scanf("%d", p);

这句是让用户输入数据,然后放入指针p指向的那个变量地址里面去。

1、用字符数组的形式来存储字符串

代码2-1

#include <stdio.h>

int main()
{
        char str[128];
        printf("请输入你的名字:");
        scanf("%s",str);

        printf("%s\n", str);

        return 0;

}
~      

输出信息:

请输入你的名字:david
david

char str[128];

定义一个数组

scanf("%s", str);

输入字符串是%s,str和指针一样,不用加取值操作符。

代码2-3

#include <stdio.h>

int main()
{
        char str[128];
        printf("请输入你的名字:");
        scanf("%s",str);

        printf("str的地址是:%p\n", str);
        printf("str的地址是:%p\n", &str[0]);

        return 0;

}

输出信息:

请输入你的名字:david
str的地址是:0x7ffdc7d94b60
str的地址是:0x7ffdc7d94b60

数组名就是一个地址,它是数组第一个元素的地址。

代码2-4

#include<stdio.h>
int main()
{
        char a[] = "fish";
        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] -> 0x7fff77157900, a[1]-> 0x7fff77157901. a[2] -> 0x7fff77157902
b[0] -> 0x7fff77157890, b[1]-> 0x7fff77157894. b[2] -> 0x7fff77157898
c[0] -> 0x7fff771578b0, c[1]-> 0x7fff771578b4. c[2] -> 0x7fff771578b8
d[0] -> 0x7fff771578d0, d[1]-> 0x7fff771578d8. d[2] -> 0x7fff771578e0

可以看出,char类型的数组a的每个元素占1个字节。

int类型数组b,每个元素占4个字节。

float类型数组c,每个元素占4个字节。

double类型数组d,每个元素占8个字节。

代码2-5

#include <stdio.h>
int main()
{
        char a[] = "fish";
        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};

        char *p1 = a;

        printf("*p1=%c, *(p1+1)=%c, *(p1+2) = %c\n", *p1, *(p1+1), *(p1+2));

        return 0;
}

输出结果:

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

代码2-6

#include <stdio.h>
int main()
{
        char a[] = "fish";
        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};

        int *p1 = b;
        printf("*p1=%d, *(p1+1)=%d, *(p1+2) = %d\n", *p1, *(p1+1), *(p1+2));

        return 0;
}

输出结果:

*p1=1, *(p1+1)=2, *(p1+2) = 3

代码2-7

#include <stdio.h>
int main()
{
        char a[] = "fish";
        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};

        int *p1 = b;
        printf("*b=%d, *(b+1)=%d, *(b+2) = %d\n", *b, *(b+1), *(b+2));

        return 0;
}

数组元素用指针的形式来访问。

输出结果:

*b=1, *(b+1)=2, *(b+2) = 3

代码2-8

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

int main()
{
        char *str = "I love my job!" ;
        int i, length;

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

        return 0;
}

输出结果:

I love my job!

 char *str = "I love my job!" ;

定义一个字符指针变量,然后将它指向一个字符串,

 printf("%c", str[i]);

用指针的下标法对指针变量进行访问。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瑞莱科技

感谢您的支持,希望与您交流学习

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值