1922|0

2015

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

C语言字符数组和普通数组的区别 [复制链接]

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




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




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




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




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




  请看下面的代码:




view plaincopy to clipboardprint?
#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);  // num为某个元素,必须要加&取得它的地址  
    }  
  
    // 取前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() 的参数列表必须是指针。

 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表