C语言—每日选择题—Day60

指针相关博客

打响指针的第一枪:指针家族-CSDN博客

深入理解:指针变量的解引用 与 加法运算-CSDN博客

第一题

  1. 下列for循环的循环体执行次数为()
cpp 复制代码
for(int i = 10, j = 1; i = j = 0; ++i, --j)

A:0

B:1

C:无限

D:以上都不对

答案及解析 A

for循环的判断条件是 i = j = 0;赋值语句做判断条件,赋值表达式结果为右操作数的值,所以右操作数为0,整个结果就是0,0为假,非0为真,那执行次数就是0

第二题

  1. 对于下面 **char (*p)[16]**的声明描述正确的一项是()
    A:p是长度为16的字符指针数组

B:p是包含16个字符的字符串

C:p是指向长度为16的字符数组的指针

D:p是长度为16的字符数组

答案及解析 C

首先*会先和p结合形成指针,指针的类型是char [16],是一个长度16的字符数组,所以这是一个指向长度为16的字符数组的指针。

第三题

  1. 有以下程序,程序运行后的输出结果是()
cpp 复制代码
void ss (char *s,char t) 
{
    while (*s) 
{
        if(*s == t)
            *s = t - 'a' + 'A';
        s++;
    }
}
int main() 
{
    char str1[100] = "abcddfefdbd", c = 'd';
    ss(str1, c);
    printf ("%s\n", str1);
}

A:ABCDDEFEDBD

B:abcDDfefDbD

C:abcAAfefAbA

D:Abcddfefdbd

答案及解析 B

本题中ss函数的功能就是将字符串中的d都变成大写的,所以选B

第四题

  1. 有以下语句定义,则选项中表达式错误的是()
cpp 复制代码
int x = 5;
const int *const p = &x;
int *const q = &x; 
int const *next = &x;
const int *j = &x;

A:*p = 1;

B:q++;

C:next++;

D:( *j )++;

答案及解析 ABD

const 在 * 左侧,指针指向的内容不可以修改;

const 在 * 右侧,指针本身不可修改

第五题

  1. 有以下程序输出结果是( )
cpp 复制代码
#include <stdio.h>
int main() 
{
    int a[3][4] = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23};
    int(*p)[4] = a, i, j, k = 0;
    for (i = 0; i < 3; i++)
        for (j = 0; j < 2; j++)
            k = k + *(*(p + i) + j);
    printf("%d", k);
    return 0;
}

A:40

B:60

C:80

D:100

答案及解析 B

首先一个二维数组和一个数组指针如下图:

第一次循环:k = k + *(*(p + i) + j); i = 0;j = 0;k = 0

k = k + **p

p = a ,a 是二维数组名,代表的是第一行的地址,也就是&a[0]

p = &a[0],所以*p = *&a[0] = a[0]

a[0]是二维数组的行,代表的是每行的首元素地址,就是&a[0][0],

*p = &a[0][0];

**p = *&a[0][0] = a[0][0] = 1;

k = k + 1 = 1
第二次循环:k = k + *(*(p + i) + j);i = 0;j = 1;k = 1

k = k + *( *p + 1)

*p = &a[0][0]

k = k + *( &a[0][0] + 1) = k + *&a[0] [1] = k + a[0][1] = 4

k = 4
第三次循环:k = k + *(*(p + i) + j);i = 1;j = 0;k = 4;

k = k + *(*(p + 1) + 0) = k + *(*(p + 1)) = 12

第四次循环:k = k + *(*(p + i) + j);i = 1;j = 1;k = 13

k = k + *(*(p + 1) + 1) = 23

第五次循环:k = k + *(*(p + i) + j);i = 2;j = 0;k = 24

k = k + *(*(p + 2)) = 40

第六次循环:k = k + *(*(p + i) + j);i = 2;j = 1;k = 41

k = k + *(*(p + 2) + 1) = k + 19 = 60;

相关推荐
黑客老李23 分钟前
JavaSec | SpringAOP 链学习分析
java·运维·服务器·开发语言·学习·apache·memcached
开开心心就好31 分钟前
高效Excel合并拆分软件
开发语言·javascript·c#·ocr·排序算法·excel·最小二乘法
特立独行的猫a37 分钟前
Nuxt.js 中的路由配置详解
开发语言·前端·javascript·路由·nuxt·nuxtjs
海的诗篇_42 分钟前
移除元素-JavaScript【算法学习day.04】
javascript·学习·算法
勤奋的知更鸟1 小时前
Java编程之原型模式
java·开发语言·原型模式
自动驾驶小卡1 小时前
A*算法实现原理以及实现步骤(C++)
算法
Unpredictable2221 小时前
【VINS-Mono算法深度解析:边缘化策略、初始化与关键技术】
c++·笔记·算法·ubuntu·计算机视觉
编程绿豆侠1 小时前
力扣HOT100之多维动态规划:1143. 最长公共子序列
算法·leetcode·动态规划
珂朵莉MM1 小时前
2021 RoboCom 世界机器人开发者大赛-高职组(初赛)解题报告 | 珂学家
java·开发语言·人工智能·算法·职场和发展·机器人