刷题日记【3月30日】

在32位机器上,下面结构体

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

sizeof的结果为()

首先32位机器上,系统默认的对齐数为4.

char a: 自身对齐数1 :0~1

float b: 自身对起数4 :4~7

short c:自身对齐数2:8~9

char a: 自身对齐数1 :10~11

其中最大对齐数为4

0~12正好是最大对齐数的整数倍


有以下程序:

#include <stdio.h>
main() {
    int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}, *p = a + 5, *q = NULL;
    *q = *(p+5);
    printf("%d %d\n", *p, *q);
}

运行结果:

首先指针p->a[5];  q为空指针。

*q作为一个左值就会报错

所以:程序报错!


下列语句中,不正确的是( )

static char a[2] = {1,2};
static int a[2] = {'1','2'};
static char a[2] = {'1','2','3'};
static char a[2] = {'1'};

首先第一个:正确

第二个:int类型放入两个字符字符,用asiil码值放入数组中

第三个:超过数组的容积

第四个:正确


以下程序运行结果为:

int main() {
    int i = 010, j = 10;
    printf("%d,%d\n", ++i, j--);
    return 0;
}

i为int类型的变量,放入了八进制为的010

j为int类型的变量,放入了十进制为的10

i++:变为9 j--变为9;

但是这里的j--,是后置的,所以打印的j是原本j的值,但是打印后j的值又被减一。

同时%d是以十进制的方式打印。

所以输出的结果为:9   10


C语言中,在头文件正常引用的情况下,执行

printf("%5s""abcdefg");

后,输出结果为

%5d的意识是:当打印的字符串不够5个时,向前补空格,保证字符串为5个,但是如果超过了,则继续向后打印


以下程序运行结果为:

#include <stdio.h>
void func(int n) {
    static int num = 1;
    num += n;
    printf("%d ", num);
}
 
int main() {
    func(3);
    func(4);
    printf("\n");
    return 0;
}

首先func(3)

这时num = 4;    >输出4

func(4)

这时num被static修饰,num的值依然保留 num = 8; >输出8

静态局部变量有以下特点:
    (1)该变量在全局数据区分配内存;
    (2)静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化;
    (3)静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0;

    (4)它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束;


设有语句

int a = 5, b;
b = a > 3 && 0, a++;

执行后变量 b 的值为______0____()


64位机上,一个结构体有三个成员,分别是char、int、short类型,三个成员位于结构体中不同位置时整个结构体的大小可能是()

首先64位机器,默认对齐数为8

分析char int short

char:0~1

int:4~7

short:8~9

这个时候最大对齐数为4

则结构体大小为12.

分析 int char short

int:4~7

char:8

short:10~11

则结构体大小为12

int short char

int:4~7

short: 8~9

char :10

则结构体大小为12


以下选项中合法的实型常数是()

5E2.0
E-3
2E0
1.3E

实型常量又称实数或浮点数;有两种表示形式,分别为小数形式和指数形式;本题为指数形式,E(e)前面为十进制整数或实数且不能省略,E(e)后面为十进制整数且不能为实数且不能省略


#include<stdio.h>
int main( ) {
char *p1 = "hello";
char *p2 = "world";
char *p3 = "a piece of cake";
char *str[] = {p1, p2, p3};
printf("%c", *(str[0] + 1));
}

求运行结果:

str[0]表示p1同时已经解引用,这时已经变成“hello”的首字符地址,然后+1变成e,然后输出字符e


运行以下C语言代码,输出的结果是()

#include <stdio.h>
int main()
{
    char *str[3] ={"stra", "strb", "strc"};
    char *p =str[0];
    int i = 0;
    while(i < 3)
    {
        printf("%s ",p++);
        i++;
    }
    return 0;
}

这里的p是已经指向了“stra”的首字母,然后用%s的形式打印,每次打印一次后往后移动一位,

打印三次,%s的是只能遇到'\0'才会停下来

所以答案: stra tra ra

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值