解析以下代码

目录

                1.1 代码1

                1.2 代码2

                1.3 代码3

                1.4 代码4

                1.5 代码5

        2.解析

                2.1 解析(题一)

                2.2 解析 (题二)

                2.3 解析 (题三)

                2.3 解析(题四)

                2.4 解析(题五)


1.代码

int main(void) {
     int a[5] = {1, 2, 3, 4, 5};
     int *ptr = (int *)(&a + 1);
     printf("%d %d", *(a + 1), *(ptr - 1));
     return 0;
 }

2.解析

 数组名本质上其实就是首元素的地址

如果取地址数组名,所以int* ptr=(&a+1)就是整个数组的地址+1就是p跳过整个数组

因为a是一个整型的数组,所以*(a+1)从首元素开始跳过4个字节正好跳到第二个元素 2

ptr使用整型指针存放的a的地址,所以一次也是跳过一个字节,*(prt-1)就是往前跳四个字节正好回到了a数组的第五个元素5

所以最后的结果就是2和5

1.2 代码2

int main() {
    int i, j, k, a = 3, b = 2;
    i = (--a == b++) ? --a : ++b;
    j = a++;
    k = b;
    printf("i=%d,j=%d,k=%d\n", i, j, k);
    return 0;
}

2.2解析(题二)

        首先一个条件表达式

                --a先减减后使用 a=2

                b++先使用后加加 b=2   

                a==b

                然后b=3

                i=--a 等于1

                j=a++先加后使用 j=1,a=2

               k=b,b=3,k=3

                所以最后的结果是  i=1 j=1 k=3

代码三

#include <stdio.h>
    main(){
    int a = 2, c = 5;
    printf("a=%%d,b=%%d\n", a, c);
}

解析三

        在c语言中每两个%%会被当成一个%(字符)直接输出,由于d没有了格式控制符,所以也被当做了一个普通字符

        (如果两个%配成一对的话就合成一个普通字符失去了可是控制符的功能)

代码四

scanf("a=%f,b=%d", &a, &b);

解析四       

在输入数据的时候,引号里面的内容必须全部输入

代码五

struct {
    short a;
    char b; 
    float c; 
}cs; 

  解析(题五)

short是2字节

char是1字节

float是4字节

过程:

首先short占了2字节,然后轮到char,他只占1但是由于已经有了short的2字节所以整个结构体需要是2字节的倍数,因此char占了1字节之后对齐补上1字节。最后轮到float,4字节,是2的倍数所以不用补。

现在整个结构体就是2+(1+1)+4=8,结构体的大小需要是最长元素的倍数,也就是4的倍数,很显然满足,所以最终答案就是8。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值