我正在尝试学习数据结构的基本步骤,最近在执行程序后遇到了问题。
我试图通过值调用"函数"和"通过参考和#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日期
使用指针
与上面相同//使用指针调用的函数似乎被完全绕过了?
答案 0 :(得分:1)
您的change_ptr
函数不会返回任何内容,即使它被声明为返回struct attendance
,因此结果未定义。
此外,将指针传递给函数并将其返回以及副本都没有意义,但这不是你的问题。
由于您已经传递了指针,因此可以将其声明为void并仍然打印修改后的内容。