c语言中的数组与指针

在c语言中,只有在函数定义的形式参数中,数组和指针是一致的。下面一段是c expert中的代码,我另外又加了一些。

char ga[] = "abcdefghijklm";

void my_array_func(char ca[10])
{
	printf(" value of ca = %#x \n", ca);
	printf(" addr of array param = %#x \n", &ca);
	printf(" addr (ca[0]) = %#x \n", &(ca[0]));
	printf(" addr (ca[1]) = %#x \n", &(ca[1]));
	printf(" ++ca = %#x \n\n", ++ca);
}

void my_pointer_func(char* pa)
{
	printf(" value of pa = %#x \n", pa);
	printf(" addr of ptr param = %#x \n", &pa);
	printf(" addr (pa[0]) = %#x \n", &(pa[0]));
	printf(" addr (pa[1]) = %#x \n", &(pa[1]));
	printf(" ++pa = %#x \n\n", ++pa);	
}

int main()
{
	printf(" value of ga = %#x \n", ga);
	printf(" addr of global array = %#x \n", &ga);
	printf(" addr (ga[0]) = %#x \n", &(ga[0]));
	printf(" addr (ga[1]) = %#x \n\n", &(ga[1]));
	
	my_array_func(ga);
	my_pointer_func(ga);

	return 0;
}

上面的运行结果,我们可以看到,数组的参数地址和数组参数的第一个元素的地址是不一样的;另外,全局的数组中,ga 和 &ga是一致的,说明在数组的解引用过程中,是直接用该值的。相反,在指针中,不论是数组参数,还是指针参数(在这种情况下,其实编译器都是作为指针来看待的),ca 和 &ca是不一致的,说明在使用ca进行解引用的过程中,比ga多了一步(pa的情况同ca一致)。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值