每日一题:C语言基础 指针

学习目标:

复习C语言指针,理解char,double,long,int等类型在STM32存储器中占用地址空间大小。

学习内容:

该程序运行在STM32等32位MCU中。

char  *s = (char *)"abcdefghijklmn";
        double *s1 =(double *) s;
        long   *s2 =(long   *) s;
        int    *s3 =(int    *) s;

        s1++;
        s2++;
        s3++;

        printf("%c",*(char *)s1);
        printf("%c",*(char *)s2);
        printf("%c",*(char *)s3);

答案和解释:

char *s = (char *)“abcdefghijklmn”; //s是字符指针,指向字符串首地址 double *s1 =(double *) s; //s1是 double类型指针,指向s首地址,也就是字符a存放地址。 long *s2 =(long *) s; //s2是 long类型指针,指向s首地址,也就是a存放地址 int *s3 =(int *) s; //s3是 int类型指针,指向s首地址,也就是a存放地址

s1++; //s1是double类型指针,8字节,所以地址+8, s2++; //s1是long 类型指针,4字节,所以地址+4, s3++; //s1是int 类型指针,4字节,所以地址+4,

printf("%c",*(char )s1); //i printf("%c",(char )s2); //e printf("%c",(char *)s3); //e

答案请看代码注释:

这里以double为例来解释: 首先s是指向字符串的字符指针,然后s1指向s,因为s1是double类型指针,所以s1++是地址+8,abcdefghijklmn。 即:输出i

经验分享 程序员 微信小程序 职场和发展