外贸网

  • 首页
  • 在C程里,为啥用指针做形参的函数可以改变实参数组的值? 学习c和c++编程时,为何指针会与许多概念有关联,比如说变量...

    作者:媒体   更新日期:2024.05.08
    c语言就这样规定的,可以访问到那个地址,改变了地址里元素的值,所以实参数组的值也改变了

    C语言参数传递是值传递, 也就是拷贝一份参数到函数中.
    指针作为形参, 会拷贝指针在函数中使用.
    如果改变指针的值是没有效果的,因为这只是参数的一份拷贝.
    如果改变指针指向的值是有效的, 因为该指针指向的内存在内存中是唯一的.

    学习c和c++编程时,为何指针会与许多概念有关联,比如说变量、数组,函数啊,还有形式参数与实参什么的?

    数据是放在内存中一个一个的字节里的,要想操作数据,比如知道这个数据占了几个字节,以及占的第一个字节的编号是什么,这个编号就是地址。

    以前的汇编语言,程序员写层序必须告诉计算机这个地址,但是数据多了就麻烦了,于是有人想出来了办法,给这个地址起个名字写程序不就好记了么,这就是变量名的由来,但是仅有这个地址不行,因为一个数据可能占好多字节,于是变量就有了类型,不同的变量类型其实就是告诉操作系统这个数据占据的字节数。

    有了变量名,很多程序写起来就好写多了,但偏偏有时候还需要用到这个地址,于是就出现了指针这个概念,这个指针存储的,其实就是地址,指针的类型,其实指的是它这个地址指向的数据的类型,操作这个数据,既可以用变量名,也可以通过这个指针找到该地址,再通过指针类型知道它占据了多大空间,从而操作它。

    形参是你编写函数时,并不知道让你要计算的数据是什么,于是你假设了两个数据,这样你才能编写程序实现功能,这就是形参,也称虚参。比如让你编写求和函数,add,你不写上两个参数 a和b,你代码里没法写求和过程即 a+b 啊。

    实参就是别的函数调用你的函数时,真正让你计算的数据,这个参数会替代虚参参与运算,从而得到结果,比如你调用 add(c,d); ,c和d才是真正要计算的数据,但你写 add 函数时,你是不知道要你计算的是c和d的。

    当然,解释起来涉及到的东西很多,我就不多说了,越说越多,自己多看看,多谢谢程序就理解了。

    printf("%x
    ",score+1);printf("%x
    ",*score+1);自己看看差多少voidaverage(float*p,intn)这个函数参数的类型是float*而score是float**类型,它赋值给p的时候发生了类型转换,转换成了float**score是float*类型,它们2个都指向第一个元素,所以效果就一样的咯。float*指针加1,当然只偏移sizeof(float)字节

    什么时候用指针形参?什么时候用引用形参?
    答:标准 C 中是没有引用形参的,只能使用指针形参。C++ 引入指针形参是为了降低指针灵活性带来的风险,指针形参不仅可以将数据的引用传入函数,还可以在函数内改变这个指针,也就是说在函数内部可以改变调用域的变量(而不仅仅是...

    C语言调用函数互换ab,为什么要用指针。不用指针能行吗?注意,是调用函 ...
    答:这是 C 语言 本身 特性 规定了 的。你只要记住 这点: 形参 必须用指针,这样才能把 通过 函数加工 后的 数值 带回来。通过函数 互换后 的a,b,才能被带回。至于“为什么”,可以不去追究,它的理由 无非 是什么 ...

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

    请问C++中,用数组作为函数形参和用指针作为函数形参,有什么不同?
    答:最大的差别就是指针可以改变,可以通过指针改变指向内容的值,但数组名不行 举个例子:(分别作为形参)int num[10], *p;p = num;//此时p指向数组的第一个元素 我在主函数里调用两个函数 1 Sum(num);2 Sum(p...

    C语言 指针做函数参数 的优点
    答:因为你传进去的是a的地址,所以在modify函数中的操作都是对a地址上的内容进行操作,即是操作a所以modify函数不用返回这个数,main中a的值也会改变。因为大家都是操作同一个内存空间,而上面不用指针,modify操作的是另一个...

    在c语言中,指针作为函数参数,形参只能传递值,而不能传递地址,是怎么回 ...
    答:C++传引用函数:void foo(int& a) { a = 3; } 假如a = 2,执行foo(a)后,a = 3。--- C语言可以模拟传引用,方法是通过指针来实现:void foo2(int* ap) { *ap = 3; } 假如a = 2,执行foo2(&a)后...

    c语言为什么用指针?
    答:在指针的算术运算中,指针所指向的类型有很大的作用。 指针的类型(即指针本身的类型)和指针所指向的类型是两个概念。当你对C越来越熟悉时,你会发现,把 与指针搅和在一起的“类型”这个概念分成“指针的类型”和“指针所指向的类型”...

    请问c语言中形参为指针是为设么实参有时加&有时不加,求高手解答。
    答:再说指针形参,假设两个自定义函数:int func1(int *p){……}//指向int类型的变量的指针做形参 int func2(int m){……}//int类型的变量做形参 void main(){ int a=0,*b,c;b=&a;c=func1(b);//或者你也...

    指针变量能只能作为函数的形参不可以作函数的实参对还是错
    答:当数组名作函数的参数时,传递到是数组的起始地址,形参是用来接受从实参传递过来的实参数组的地址的。因此,形参应该是一个地址变量(只有指针才能存放地址)。数组名就是数组的首地址,实参向形参传递数组名实际上就是传送...

    C语言问题 函数中形参若为普通变量,则调用时对应位置上的实参可以是指针...
    答:为何要用指针做形参呢?因为指针是地址,这样一般情况下会使得该函数成功。(若是采用普通变量做形参,函数运行了一圈,出去之后,发现,什么都没变化,这个很郁闷的)指针做变量一定能够改变他的值么?不一定!在调用的函数...