指向C中数组的第一个元素

gr0gu3

抱歉,如果您已经提出了这个问题,我在发布之前进行了搜索,但找不到答案。

我有以下代码:

#include<stdio.h>
#include<stdlib.h>

#define ESC 27

typedef struct{
    int data[10];
    int n;
} tlist;

void menu(){
    printf("Options:\n");
    printf("1) Show list\n");
    printf("ESC) Quit\n");
}

void showList(tlist *list){
    int *p;
    p = &list->data[0];
    if(list->n == 0){
        printf("Empty list!\n\n");
    }else{
        for(int i=0; i<list->n; i++){
            printf("%d \n", *p);
            p++;
        }
    }
}

int main(){
    char choice;
    tlist list;
    list.n = 10;

    list.data[0] = 16;  
    list.data[1] = 17;
    list.data[2] = 18;
    list.data[3] = 19;
    list.data[4] = 20;
    list.data[5] = 21;
    list.data[6] = 22;
    list.data[7] = 23;
    list.data[8] = 24;
    list.data[9] = 25;
    do{
        menu();
        scanf("%s",&choice);
            switch(choice){
                case '1': showList(&list);
                    break;
                case ESC:
                    printf("quiting...\n");
                    break;
                default:
                    printf("Invalid Choice!\n");
                    break;      
            }
    }while(choice != ESC);
    return 0;
}

当我运行该程序时,我将得到以下输出:

0 17 18 19 20 21 22 23 24 25

我不明白为什么第一个打印是数组中第一个元素的位置,而不是第一个元素本身。有人可以解释一下吗?

PW

choice是一个char,正确的转换说明符用于scanfisc和not s

使用scanf穿插式printf语句打印新行(\n时,还必须小心

scanf具有转换说明符时c,它将把任何空格解释为一个字符,并且不等待实际的输入。因此,scanf此处应通过包含前导空格来留出空白字符。

因此,该scanf语句应为:

scanf(" %c", &choice);

scanf在程序中继续进行操作之前,最好检查返回值按照标准,scanf返回分配的输入项目的数量,如果早期匹配失败,该数量可以少于提供的数量,甚至为零。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

指向数组第一个元素之前的指针

指向结构数组中的第一个结构?

为什么在C中不允许在数组的第一个元素之前指向一个?

应用于数组名称的sizeof与指向数组第一个元素的指针

为什么%d指向数组的指针给我数组的第一个元素?

跳过Golang中数组的第一个元素

如何检查数组中的第一个元素

从数组中删除第一个元素

刷卡中的数组获取第一个元素

在def中返回数组的第一个元素

ngxs setstate数组中的第一个元素

数组中的第一个非负元素

读取数组中的第一个元素

数组第一个元素

从数组中删除第一个元素并返回减去第一个元素的数组

为什么数组的大小和指向第一个元素的指针不同?

是否通过指向第一个元素UB的指针访问多维数组的中间?

通过指向第一个元素的指针访问二维数组

如何检查数组c ++中的第一个元素和最后一个元素

在Java数组名中生成一个指向数组第一个元素的指针?

将指针指向结构的第一个元素

为什么将\ 0定义为C中char数组的第一个元素?

数组的地址是否等于C ++中其第一个元素的地址?

C中的动态二维数组不读取第一个元素

数组的地址是否等于C中的第一个元素

第一个数组元素在循环 C++ 中丢失

指向 struct 的双指针中的第一个元素是 jiberrish

从列表中创建一个数组,其中数组的第一个元素是列表中的第一个元素

删除数组中的第一个和最后一个元素