泡泡茶壶(大一小白) 2022-10-31 15:39 采纳率: 57.1%
浏览 18
已结题

关于指针以及函数问题

今天上课教师给的课件有些搞不明白,想问下各位。前面设的函数的未知数xyz相当一个代表。后面再设xyz变量带进去应该不是和前面xyz一一对应的吧,那为什么后面可以直接写printf打印出来,你怎么知道哪个变量对应公式里的哪个。比如我后面变量改成abc也行吗?

img

  • 写回答

2条回答 默认 最新

  • .LAL. C/C++领域新星创作者 2022-10-31 15:54
    关注

    1、如果自己定义的函数和库函数重名,自己定义的函数优先级更高。

    2、函数中return 只能返回一个值。

    3、最好不要在函数中循环调用,即递归调用,首先应当弄清逻辑关系。

    4、调用方法:函数名(实参)。

    5、特点:反复使用、独立代码。

    6、引用:实参和形参是一个变量,可返回两个以上的结果,是最安全最便捷的方式。

    7、函数形参可以没有,但是必须写小括号,形参数据类型需要一一说明。

    8、传递方式:传数值(int x,int y)、传地址(int *x,int *y)、传引用(int &x,int &y)。传引用不分配新的空间,是实参变量的空间(同一个变量),省空间,和“swap(a,b);”连用。

    9、传地址方式:指针变量。

    10、&:在正常语句中起取地址的作用,在说明语句中起引用的作用。

    11、指针变量:其内容为地址(存储位置)的变量,简称指针,它所指向的地址上存放的变量称作目标变量。

    12、int *x;//int是目标变量的类型

    13、指针变量:无符号32位整数。

    14、在说明语句前加*:定义指针变量。

    15、一个指针变量只能指向同一类型的变量。

    16、int i;

       int *i_point =&i;//&是取地址运算
    
       *i_point=3;//*是取内容运算,取指向的目标对象的内容。
    

    17、*p1=10;*p2=100;//p1和p2相当于变量名,和“swap(&a,&b);”连用。

    18、在正常语句中,指针变量p1输出地址,*p1输出变量值。

    19、绝对不能对未赋值的指针做取内容运算。

    20、数组名本身就是数组的首地址。

    21、++(--)指向下一个(或上一个)同种类型的数据。

    22、传地址:把实参地址给形参。

    23、若主函数和函数中都定义了a,b变量,这两组变量不是同一变量。

    24、int *p;//定义指针变量

       int &x=y;//&x相当于变量,把y的值赋给x
    
       p=&x;//指针p指向x的地址
    
       y=*p;//把p指向的内容赋给y
    

    25、指向数组元素的指针:

    int a[10],*p;

    p=&a[0];//数组第一个元素的地址

    p=a;//p是指针变量,a是指针常量

    *p=1等同于a[0]=1//通过指针变量为数组元素赋值

    26、c++规定:p++指向数组元素的下一个元素而不是下一个字节

    27、*(p+1)=2等同于a[1]=2

       *(a+1)=2等同于a[1]=2
    
       *(a+1)与a[1]等同
    

    28、重点:*(a+i)等同于a[i]。

    29、自加自减运算的优先级最高。

    30、*(p+i)等同于p(i)。

    31、p+i或a+i均表示a[i]的地址&a[i]。

    32、指针p可以改变,a指向数组首地址,是指针常量,不可赋值不可改变。

    33、*++p=2;等同于*(p=p+1;*p=2;p=2004H)

       *++a=2是错误的,理由见32条。
    

    34、指针应用:

    (一)用指向数组的指针变量输出数组的全部元素

    int main()

    {int a[10],i;

    int *p;

    for(i=0;i<10;i++)

    cin>>a[i];

    for(p=a;p<a+10;p++)

    cout<<*p<<'\t';}

    (二)用指向数组的指针变量输出数组的全部元素

    int main()

    {int a[10],i;

    int *p=a;

    for(i=0;i<10;i++)

    cin>>a[i];

    for(i=0;i<10;i++)

    cout<<*p++<<endl;}

    (三)

    int main()

    {int x[]={1,2,3};

    int s,i,*p;

    s=1;p=x;

    for(i=0;i<3;i++)

    s*=*(p+i);

    cout<<s<<endl;}

    35、用指针变量作函数参数(形参)接收数组地址(实参)

    数组名代表数组首元素的地址

    用数组名做函数的参数,传递的是数组首元素的地址

    用指针变量做函数的形参,同样可以接收从实参传递来的数组首元素的地址(此时实参是数组名)

    例1

    形参实参都用数组名

    int main() f(int arr[],int n)//形参数组,必须进行类型说明

    {int array[10]; {.........}

    .........

    f(array,10);//实参数组

    ......

    }

    用数组名作形参,因为接收的是地址,所以可以不指定具体的元素的个数

    例2
    

    实参用数组名,形参用指针变量

    int main() f(int *x,int n)//形参指针

    {int a[10]; {......}

    ......

    f(a,10);

    ......

    }

    例3

    用指针逆序输出

    void inv(int *x,int n)

    {int *p,t,*i,*j,m=(n-1)/2;

    i=x,j=x+n-1,p=x+m;

    for(;i<=p;i++,j--)

    {t=*i,*i=*j,*j=t;}

    }

    int main()//用指针变量来接收地址

    {int i,a[10]={3,7,9,11,0,6,7,5,4,2};

    inv(a,10);

    for(i=0;i<10;i++)

    cout<<a[i]<<'\t';

    return 0;

    }

    例4

    形参实参都用指针变量

    int main() f(int *x,int n)//形参指针

    {int a[10],*p; {......}

    p=a;

    .....

    f(p,10);//实参指针

    ......

    }//实参指针调用前必须赋值

    例5

    实参为指针变量,形参为数组名

    int main() f(int x[],int n)//形参数组

    {int a[10],*p; {......}

    p=a;

    ......

    f(p,10);//实参指针

    ......}

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月8日
  • 已采纳回答 10月31日
  • 创建了问题 10月31日

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分