这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 7.C语言字符数组和普通数组的区别

共2条 1/1 1 跳转至

7.C语言字符数组和普通数组的区别

高工
2014-10-28 15:14:44     打赏

  有读者反馈,不理解字符数组和普通数组的区别,下面笔者作一下解答。


  实际上,字符数组和普通数组一样,没有本质区别。


  请大家注意数组类型的含义:数据类型指的是数组所包含的元素的类型,而不是数组名的类型,数组名永远是一个指针,指向第一个元素的地址,即数组首地址。


  字符数组的每个元素都是char类型,整型数组的每个元素都是int类型。


  scanf() 和 printf() 函数有一种格式化字符串 %s 可以用来整体输入输出字符数组,但是没有特定的格式支持 int 数组整体数组输出。


  请看下面的代码:


#include 
int main(void){
    int num[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
    char str[] = "http://see.xidian.edu.cn/cpp/";
    int i;

    // num, str 是地址,由系统分配,与数组本身没有任何关系
    printf("num = %d, str = %d \n", num, str);

    // num, str 指向数组首地址
    printf("&num[0] = %d, &str[0] = %d \n", &num[0], &str[0]);

    // num 等价于 &num[0]
    if(num == &num[0]){
        printf("num = &num[0] \n");
    }

    // str 等价于 &str[0]
    if(str == &str[0]){
        printf("str = &str[0] \n");
    }

    // 要为某个数组元素赋值,必须取该元素的地址
    printf("input a number: ");
    scanf("%c", &str[0]);

    // scanf() 从 stdin 缓冲区读取数据
    // fflush() 用来清空缓冲区,让 scanf() 重新从控制台读取
    // 关于 fflush() 详细解释请查看:C语言fflush()
    fflush(stdin);

    printf("input a char: ");
    scanf("%c", &str[0]);

    fflush(stdin);

    // 使用 scanf() 为数组赋值时
    // 可以使用 %s 为字符数组整体赋值
    // 但是没有特定的格式化字符串来为 int数组整体赋值,必须一个一个赋值
    printf("Input a string: ");
    scanf("%s", str);  // str为地址,不需加&

    fflush(stdin);

    printf("Input 10 number: ");  // 以空格为间隔
    for(i=0; i<10; i++){
        scanf("%d", &num[i]);  // num[i]为某个元素,必须要加&取得它的地址
    }

    // 取前5个元素作为示例
    printf("The final num[] = %d, %d, %d, %d, %d \n", num[0], num[1], num[2], num[3], num[4]);
    printf("The final str[] = %s \n", str);

    return 0;
}


  运行结果:


  num = 1638176, str = 1638164

  &num[0] = 1638176, &str [0] = 1638164

  num = &num[0]

  str = &str[0]

  input a number: 5↙

  input a char: e↙

  Input a string: C语言中文网↙

  Input 10 number: 12 34 56 78 90 23 45 78 09 54↙

  The final num[] = 12, 34, 56, 78, 90

  The final str[] = C语言中文网


  再强调一次,数组类型是数组元素的类型,数组名是指向数组首地址的指针,scanf() 的参数列表必须是指针。



专家
2018-02-20 20:28:53     打赏
2楼

谢谢楼主解释。


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]