请问c语言中形参为指针是为设么实参有时加&有时不加,求高手解答。

作者&投稿:滑屠 (若有异议请与网页底部的电邮联系)
C语言的数据结构,为啥有的形参前加&而有的却不加&?这是为什么?希望大神帮帮忙啊~

c++ 中, 形参前加& 表示 “引用”。
c 语言没有引用的概念。 形参前不加 &。
c 语言 函数调用用 时 填写 的 实参,可能出现前面有 &号,这个&表示求地址运算。
当 形参 为指针时,实参需用指针 或 变量的地址。
例如:
void fun(int *a, int *b){....};
void fun2(int a, int b){....};
int x=3,y=4;
函数调用:
fun(&x, &y); // 这里,对应形参为指针的,要用 &x, &y,即 地址形式。
而 fun2(x,y); // 用变量名
你的例子里,实参 用 &L 或 L, 取决于形参类型。

swap(&x, &y); /*将x和y的地址值(即&x和&y)作为实参传递给形参*/ void swap(int *a, int *b) /*a和b是形参,接收地址类型的值*/ { int *t = a; /*声明定义一个地址变量(称指针)t赋初值以地址变量a的值(&x)*/ a = b; /*现在地址变量a存的值等于&y*/ b = t; /*现在地址变量b存的值等于&x*/ } 注意区分理解地址变量(&指针)和取地址变量的值(*指针指向的值),就能理解一楼回答的。

满意请采纳

变量有两种类型,一种是直接存储我们通常意义上的数据,另一种是专门用来存储计算机中的内存地址(也叫对其他变量的引用,其他变量在内存中的地址,等等),后者称为指针变量。
普通变量例如int a=3;则a的值是3,而&a的值是一个地址,和程序的运行状态有关。
指针除了声明时前面带*外——特征为*号左侧有Int之类的说明符来修饰——,其他地方前面带上*就代表取对应变量的值(可以放心,指针变量不能进行乘法运算),不带*就代表对应变量在内存中的地址。
如int *p=&a;接下来p就代表a的地址,*p才是a具体的值,可以把*和&当作互相抵消的一对。*p==*(&a)==a==3。
至于加括号,有可能是碰到了运算符优先级的情况,比如结构体成员运算符样子和小数点相同,它就比*的优先级高,如果你想用*p,就必须用括号把它俩和右边隔开,像(*p).name这样。除此外还有函数指针,在声明时两对括号均不可省,如void (*p)();其他情况下比较复杂,可以参照字符指针跟字符数组的关系。
再说指针形参,假设两个自定义函数:int func1(int *p){……}//指向int类型的变量的指针做形参
int func2(int m){……}//int类型的变量做形参
void main(){
int a=0,*b,c;
b=&a;
c=func1(b);//或者你也可以写c=func1(&a);因为此时需要提供一个专门于int类型地址的实参,&a一定是int类型的地址,指针b本身已经是地址了,它的值正好是一个int类型变量的地址
c=func2(*b);//或者也可写成c=func2(a);如果你愿意把*和&看成互逆的两种运算
}
其实上面两条函数调用,实参和形参的结合效果跟通常的赋值运算很神似:
int *p=b;//int *p=&a;如果你写的是c=func1(&a);
int m=*b;//int m=a;如果你这一行写的是c=func2(a);

1。参数副本的概念
函数传参会为参数创建副本,比如经常看到的swap(int a,int b)
并不能交换两个变量,具体可搜参数副本(手机打字费劲)
如果实参取&就解决了这个问题,依然看搜到的结果
2。如果不需要通过参数返回数值,咋写都行

看看“引用”就知道了!
*p (*p) p 要具体问题具体分析,要不要说的就太多了。
*p更具定义的类型可以指向特定类型的存储单元,(*p)一般用于定义函数指针或者多维数组指针。

*p取值,p指针,(*p)()函数指针,传参根据函数的要求来。要穿指针p ,指针的值*p

C语言:从调用函数来看,函数传递的是数组,所以函数的形参应为指针,为什 ...
答:函数传递的是数组的首地址,即a[0]的地址,而不是把整个地址都传过去,因为有首地址,只要往下寻找就能遍历整个数组了。而指针就可以指向数组首地址~

形参为指针的函数是否为形参分配空间
答:要理解你这个问题,你必须首先明白传值和传指针的区别。给一个函数传值,实参会把具体的值传给函数的形参,函数拿到这个值以后会产生一个临时变量(这个临时变量你是看不到的),你的整个函数的操作就是在操作这个临时变量,所以你在函数内部给,形参赋值并不能改变实参的值。给一个函数传指针,实参会...

C语言中,用数组名作形参和用指针作形参有区别吗?
答:举个例子:(分别作为形参)int num[10], *p;p = num;//此时p指向数组的第一个元素 我在主函数里调用两个函数 1 Sum(num);2 Sum(p+2,10);这就有区别了,因为num数组首地址它不能变化,但是此时p指向了数组的第三个元素,而且后面的那个10也是可以改变的,所以说用指针作为形参的时候要...

在C语言中,当形参和实参都为指针时,在函数中传递的是地址吗?
答:是的,指针这玩意儿,就是专门和地址挂钩的!

C语言中,函数形参为指针,调用时的实参为立即数,应该怎么转化类型?_百度...
答:立即数不能转换成指针,因为它不在内存中。(int*)2表示从地址0x02开始的int型的地址空间。如果你的函数形参是指针而实参却需要传递立即数,说明这个函数编的是有问题的。如果你一定要传递,可以用一个中间变量存放立即数,然后传递该变量的地址。

我是学计算机的,有几道C语言的题目,请高手帮忙解答一下(关于指针的...
答:c语言中,函数形参为指针,则想函数传递的是实参的地址,对 *指针 的操作会反映到实参上 就像 1题中 sub(10,5,&a); 向形参z传递的是 a的 地址,在 函数中对 *z 的操作就是对a的操作 因此 a,b,c分别为-5,-12,-7;2题中 判断p1==&m为假 那么a当然就是0了;...

在C语言中,指针是怎样通过形参改变实参的?怎样理解?如果此处难讲清楚...
答:这个要从传值和传指针调用区别说起.首先,每个函数的形参,都相当于一个函数的局部变量.那么传值调用时,比如函数 fun(int a);的时候,调用fun(b);相当于新建了一个局部变量int a=b; 然后 改变a的值自然不会改变b.而传指针调用,比如 fun(int *p);这时调用fun(q); q是另外一个指针.那么等效于...

计算机c语言 fun(int a[10]) {…} 中函数形参为什么说是指针类型
答:C语言里面数组和指针关系密切:数组名就是一个指针,表示第一个元素的地址,所以可以直接把定义后的数组名赋值给同类型的指针变量,用做函数的参数时,数组和指针等效的,即fun(int *p)和fun(int a[])等效。

C语言中函数实参变量用指针时, 形参变量也必须用指针? 判断对错 请举 ...
答:错了。书上原文是尽量 指针可以用数组来接收 不信你运行下以下代码

C语言中,函数形参为指针,调用时的实参为立即数,应该怎么转化类型?_百度...
答:立即数不能转换成指针,因为它不在内存中。(int*)2表示从地址0x02开始的int型的地址空间。如果你的函数形参是指针而实参却需要传递立即数,说明这个函数编的是有问题的。如果你一定要传递,可以用一个中间变量存放立即数,然后传递该变量的地址。