首页 > 代码库 > C专家编程之为什么C语言把数组形参当做指针:数组/指针实参
C专家编程之为什么C语言把数组形参当做指针:数组/指针实参
#include<stdio.h> void print_array_test(char ca[]) { printf("ca : %s\n",ca); printf("&ca : %s\n",&ca); printf("&(ca[0]) : %s\n",&(ca[0])); printf("&(ca[1]) : %s\n",&(ca[1])); printf("*(ca+0) : %c\n",*(ca+0)); printf("*(ca+1) : %c\n",*(ca+1)); printf("ca+1 : %s\n",ca+1); } void print_ptr_test(char *pa) { printf("pa : %s\n",pa); printf("&pa : %s\n",&pa); printf("&(pa[0]) : %s\n",&(pa[0])); printf("&(pa[1]) : %s\n",&(pa[1])); printf("pa+1 : %s\n",pa+1); printf("pa[1] : %c\n",pa[1]); printf("*(pa+1) : %c\n",*(pa+1)); printf("++pa : %s\n",++pa); } int main() { char abc[]="hello,world!"; print_array_test(abc); print_ptr_test(abc); return 0; }
数组abc[20]="hello,world!"
中&abc[i]与abc+i含义相同——取的是abc[i]的地址
指针pa =abc;
pa[i]与*(pa+i)是等价的——取的是abc[i]的值
鉴于以上程序,运行之:
[root@localhost code]# ./arrayandptr
ca : hello,world!
&ca : ???,??;
&(ca[0]) : hello,world!
&(ca[1]) : ello,world!
*(ca+0) : h
*(ca+1) : e
ca+1 : ello,world!
pa : hello,world!
&pa : ???,??;
&(pa[0]) : hello,world!
&(pa[1]) : ello,world!
pa+1 : ello,world!
pa[1] : e
*(pa+1) : e
++pa : ello,world!
[root@localhost code]#
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。