使用指针不会改变输出结构

时间:2014-12-06 13:50:06

标签: c data-structures

我正在尝试学习数据结构的基本步骤,最近在执行程序后遇到了问题。

我试图通过值调用"函数"和"通过参考和#34; (在[]中的注释中标记为1和2。

   #include<stdio.h>
   #include<string.h>


 struct date
 {
  unsigned int year;
  unsigned char month[30];
 };

 struct attendance
 {
 unsigned char name[30];
 long unsigned int record_no;
 double time;
 struct date d;

 }stu1;

 struct attendance change(struct attendance stu);
 void display(struct attendance);

      //<<  declaring function using pointer structure [1]
 void change_ptr(struct attendance *); //<<edit

 int main()
 {
      char ch;
      char buff[100];
      struct attendance stu2;


      printf("enter the name: \t record.no \t and time \n");
      scanf("%s%lu%lf",stu1.name,&stu1.record_no,&stu1.time);
      printf("\n");
      stu2=stu1;    //copied contents of structure 1 to 2
      stu1=change(stu1);
      display(stu1);

      printf("\n");
      printf("change using a pointer \n");
      printf("\n");

      change_ptr(&stu2); //<<function called  <<edit
      display(stu2);         //no change in output ???
      getch();

}


struct attendance change(struct attendance stu) //function by value 
{
     char tr[30]="good day ";
     char fp[50];

     stu.record_no +=1000;
     strcpy(fp,stu.name);
     strcpy(stu.name,tr);
     strcat(stu.name,fp);

     stu.time-=70.30;
     return stu;
}

void display(struct attendance stu)
{
printf("%s \n record.no = %lu \t time = %lf \n",stu1.name,stu1.record_no,stu1.time);
}

  //facing problem here;;

void change_ptr(struct attendance *p)// <<pointer function [2]
{
     strcat(p->name,"  welcome  ");
     p->record_no+=5000;
     p->time-=2000;

};

在上面的程序中,我使用了&#34;按值调用&#34; &#34;通过引用&#34;调用,我使用前一个没有问题但是当涉及后一个函数时,我似乎得到与前一个值函数调用相同的输出。

输出

按值调用

JAMES WELCOME&lt;

XXXX ROLL NO

XXXX日期

使用指针

与上面相同//使用指针调用的函数似乎被完全绕过了?

1 个答案:

答案 0 :(得分:1)

您的change_ptr函数不会返回任何内容,即使它被声明为返回struct attendance,因此结果未定义。

此外,将指针传递给函数并将其返回以及副本都没有意义,但这不是你的问题。

由于您已经传递了指针,因此可以将其声明为void并仍然打印修改后的内容。