C语言指针变量作为函数参数

有读者反馈,不理解字符数组和普通数组的区别,下面笔者作一下解答。
实际上,字符数组和普通数组一样,没有本质区别。
请大家注意数组类型的含义:数据类型指的是数组所包含的元素的类型,而不是数组名的类型,数组名永远是一个指针,指向第一个元素的地址,即数组首地址。
字符数组的每个元素都是char类型,整型数组的每个元素都是int类型。
scanf() 和 printf() 函数有一种格式化字符串 %s 可以用来整体输入输出字符数组,但是没有特定的格式支持 int 数组整体数组输出。
请看下面的代码:

  1. #include
  2. int main(void){
  3. int num[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
  4. char str[] = "http://see.xidian.edu.cn/cpp/";
  5. int i;
  6. // num, str 是地址,由系统分配,与数组本身没有任何关系
  7. printf("num = %d, str = %d \n", num, str);
  8. // num, str 指向数组首地址
  9. printf("&num[0] = %d, &str[0] = %d \n", &num[0], &str[0]);
  10. // num 等价于 &num[0]
  11. if(num == &num[0]){
  12. printf("num = &num[0] \n");
  13. }
  14. // str 等价于 &str[0]
  15. if(str == &str[0]){
  16. printf("str = &str[0] \n");
  17. }
  18. // 要为某个数组元素赋值,必须取该元素的地址
  19. printf("input a number: ");
  20. scanf("%c", &str[0]);
  21. // scanf() 从 stdin 缓冲区读取数据
  22. // fflush() 用来清空缓冲区,让 scanf() 重新从控制台读取
  23. // 关于 fflush() 详细解释请查看:C语言fflush()
  24. fflush(stdin);
  25. printf("input a char: ");
  26. scanf("%c", &str[0]);
  27. fflush(stdin);
  28. // 使用 scanf() 为数组赋值时
  29. // 可以使用 %s 为字符数组整体赋值
  30. // 但是没有特定的格式化字符串来为 int数组整体赋值,必须一个一个赋值
  31. printf("Input a string: ");
  32. scanf("%s", str); // str为地址,不需加&
  33. fflush(stdin);
  34. printf("Input 10 number: "); // 以空格为间隔
  35. for(i=0; i<</SPAN>10; i++){
  36. scanf("%d", &num[i]); // num[i]为某个元素,必须要加&取得它的地址
  37. }
  38. // 取前5个元素作为示例
  39. printf("The final num[] = %d, %d, %d, %d, %d \n", num[0], num[1], num[2], num[3], num[4]);
  40. printf("The final str[] = %s \n", str);
  41. return 0;
  42. }

运行结果:
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语言中文网

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值