扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
1、fun(&b,a);中传入a字符。*c=*c+1将c的值变为b字符。主函数的值改变。第二个参数是值传递,所以在函数中d的值为B字符。但是并不影响主函数的值,所以主函数输出a的值是A。b的值是b。
目前创新互联已为近1000家的企业提供了网站建设、域名、网络空间、网站托管、服务器托管、企业网站设计、贡山网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
2、一般变量作为形参,是不能改变实参值的哦,要返回数据就用return;指针指向真实的地址,不重新分配内存,所以调用函数后,如果函数里改变了指针指向的值,那这个数就真的变了。调用就是用函数名,还要传送相应的调用参数。
3、*py就是x,这里相当于x=10;指针变量作为函数的参数时,子函数可以通过指针引用实参地址中的数据,达到修改实参地址中的数据。
4、如果使用指针作为参数就是地址传递,否则只是值传递。你可以看下下面的这个函数:void modify(int a){ a++;} void main(){ int a=5;modify(a);printf(%d,a);} 这个程序的答案还是5。
5、应该改为 if((*cmp)(a[i],a[i+1]))swap(a+i,a+i+1);才对。估记swap是交换两个地址的内容。b u b b l e _ s o r t函数的最后一个参数是指向函数的指针,即是函数的入口地址。
数组名本质上就是个指针,也就是地址,但是它是一个常指针,是个固定值,而指针是是指针变量的简称,是个变量,这个变量存放的是地址值,它的值是可以改变的。
指针和数组都属于传址方式,也就是把实参的地址传递给形参,形参和实参共享一个内存单元。形参数值的改变会影响到实参的数值。而变量的传递属于传值方式,把主程序调用过程的具体数值(实参)复制给函数的参数(形参)。
在C语言中,数组作为参数,进行传递时,传递的是指针 ,换句话说,字符数组作为参数,进行传递时,传递的是字符数组的起始地址,相当于一个字符指针,两者没有区别。
实参的数组就是数组,而指针就是指针。形参只存在指针,不存在数组,即使传递数组,或将形参写成数组的形式如int a[],最终得到的还是一个指针。
当然,在某些情况下,是可以混用的,比如作为函数的形参,无论你写成char s[]还是char *s,都没有区别,在函数内对这两种传来的实参作sizeof,也都只能是得到指针大小,并不会因为你写char s[],而返回数组的大小。
0]的地址),数组名是一个指针常量,在运行过程中不能改变其值(如上:a的值是&a[0],若有a=&a[2]:则报错)。他们的区别:数组名是一个指针常量,而指针可分为:指针常量和指针变量。我想你应该明白了。
1、在指针的算术运算中,指针所指向的类型有很大的作用。 指针的类型(即指针本身的类型)和指针所指向的类型是两个概念。
2、s表示变量m本身,对*s的赋值就是对m赋值,所以*s=a[p]是正确的。请注意,函数fun中的s变量是一个地址,只对该地址进行重新赋值,并不对其所指向的变量m造成影响。所以s=&a[p]不改变main函数中m变量的值。
3、string = NULL;大大地错了!*string就是string[0],给它赋值NULL不能使string成为NULL;而string又是数组名,想string=NULL逻辑就对了,但由于string是“常”指针却是非法的。
4、指针作为参数传给函数时不会成空指针,因为,函数的形参是实参的一个副本,在函数内部释放掉的是形参,不会影响到实参的。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流