📌  相关文章
📜  教资会网络 | UGC NET CS 2018 年 12 月 – II |问题 61(1)

📅  最后修改于: 2023-12-03 14:54:51.048000             🧑  作者: Mango

教资会网络 | UGC NET CS 2018 年 12 月 – II |问题 61

在计算机科学领域中,UGC NET(全国资格测试)是一项重要的考试。UGC NET计算机科学考试由印度教育委员会(National Testing Agency)管理并组织。这项考试的目的是评估一个人在计算机科学理论和应用方面的知识和技能。这篇文章将介绍UGC NET CS 2018年12月-II的第61个问题,探讨相关话题。

问题61

以下C程序的输出是什么?

#include<stdio.h> 
int main() 
{ 
    int i; 
    char a[4] = "123"; 
    char *p = "123"; 
    for(i=0; i<3; i++) 
        printf("%d %d", a[i], *(p+i)); 
    return 0; 
} 
  1. 49 49 50 50 51 51
  2. 51 51 50 50 49 49
  3. 49 50 51 49 50 51
  4. 50 49 51 50 49 51
解析

这道题是考察C语言中char类型和char指针的区别,以及字符数组的赋值方式。在程序中,变量a是一个长度为4的字符数组,而指针变量p指向了一个字符串"123"。

在C语言中,字符数组的初始化有两种方式:一种是定义数组时直接赋值,另一种是逐个字符赋值。例如:

char a[4] = "123";

这种方式定义的数组长度应该大于等于字符串的长度。在这个例子中,a[4] = "123"实际上被编译器翻译成了下面这行代码:

char a[4] = {'1', '2', '3', '\0'};

因为字符数组在C语言中以null字符(\0)结尾。

指针变量p也指向“123”,但是它并不是一个字符数组,而是一个字符串常量,这意味着它不能被修改。因此在赋值时,只需将指针变量p指向字符串首字符的地址即可:

char *p = "123";

在这个程序中,for循环迭代三次,每次输出字符数组a中第i个字符的ASCII码和指针变量p所指向的字符串中第i个字符的ASCII码。注意,由于字符数组a中有null字符,循环会输出4个数字,而不是3个数字。

由此得出,答案是1. 49 49 50 50 51 51。其中,49、50和51分别对应字符'1'、'2'和'3'的ASCII码。

代码片段
#include<stdio.h> 

int main() {
    int i; 
    char a[4] = "123";
    char *p = "123";
    for(i=0; i<3; i++) {
        printf("%d %d", a[i], *(p+i));
    } 
    return 0; 
}
输出:
49 49 50 50 51 51