形参是指针了为什么还要加&

传形参的时候为什么已经是传的指针了 还要加取地址符号 传的指针的话不是已经可以让所指向的值改变了吗 取地址不是相当于取的这个指针的地址吗

img

图片不完整,要看s e的定义。如果s e不是指针,那么参数需要指针,就要取地址。

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/184563
  • 这篇博客你也可以参考下:函数括号后边加冒号,并且后边跟一些数据是这个意思
  • 除此之外, 这篇博客: 指针在实参与形参间传递的作用中的 有指针通过修改地址指向的值来修改实参 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • #include<stdio.h>
    int main()
    {
    	int a=2,b=3;
    	int * af,* bf;
    	void exchange(int *aa,int *bb);
    	af=&a;
    	bf=&b;
    	printf("a=%d,b=%d,af=%d,bf=%d\n",a,b,*af,*bf);
    	exchange(af,bf);
    	printf("a=%d,b=%d,af=%d,bf=%d\n",a,b,*af,*bf);
    
        
    }
    
    void exchange(int *aa,int *bb)
    {
    	int i;
    	i=*bb;
    	*bb=*aa;
    	*aa=i;
    }
    

    在这里插入图片描述

  • 您还可以看一下 黄菊华老师的基于微信的疫苗预约小程序 毕业设计毕设源码使用教程课程中的 疫苗预约小程序-疫苗后台管理功能演示小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    对于问题中的形参问题,其实是一个关于指针传参的问题。当我们以指针的形式作为参数传递时,实际上传递的是该指针所指向的内存地址,也就是说,我们在函数中对该指针所指向的内存进行了修改,原变量的值也会被改变。但是,如果我们直接将指针作为参数传递,实际上传递的是该指针的值,即内存地址,而函数内部的操作只是对该地址的拷贝所指向的内存的修改,并没有修改原变量所指向的内存。因此,我们需要将该指针的地址传递给函数,这样函数使用该指针时,就可以通过该地址找到原变量所指向的内存,并将其修改。因此,需要使用取地址符号(&)。

    以下是一个简单的示例代码,说明指针传参时添加取地址符号的必要性:

    #include <stdio.h>
    
    void changeValue(int* ptr) {
        *ptr = 20;
    }
    
    int main() {
        int num = 10;
        printf("num = %d\n", num);  // 输出原变量值
        changeValue(&num);  // 传递指针的地址
        printf("num = %d\n", num);  // 输出修改后的值
        return 0;
    }
    

    输出结果为:

    num = 10
    num = 20
    

    可以看到,只有当指针传参时添加了取地址符号&,函数中对该指针所指向的内存的操作才能作用于原变量。如果没有添加取地址符号,函数内部操作的是指针所指向的内存的拷贝,这对原变量不会有任何影响。