结构体作为参数,在函数里面直接修改结构体内的值

结构体作为参数时候,传递给调用函数时候是原始的值,在该函数的输出中,会改变该结构体的值,但是不会改变原结构体内参数的值。即,修改的是原始数据备份的值,不会修改结构体中的值

#include 

struct person {
	char *name;
	int age;
	int weight;
};

void changePersonl(struct person p);
void showPersonl(struct person p);

void showPersonl(struct person p) {
	printf("name:%s\n", p.name);
	printf("age:%d\ n", p.age);
	printf("weight:%d\n", p.weight);
}
void changePersonl(struct person p) {
	p.age = p.age - 2;
	p.weight = p.weight - 5;
	printf("in changePersonl()\n");
	showPersonl(p);
	return;
}

int main() {
	struct person bob, sue;

	sue.name = "sue";
	sue.age = 26;
	sue.weight = 50;

	bob.name = "bob";
	bob.age = 20;
	bob.weight = 60;
	showPersonl(sue);
	
	printf("********before changeperson*************\n");
	showPersonl(bob);
	
	printf("*************after changepersonl*************\n");
	changePersonl(bob);
	
	showPersonl(bob);
	return 0;
}

结构体作为参数,在函数里面直接修改结构体内的值_第1张图片
if 想要通过调用函数修改这个结构体中原始数据的值,需要定义指针,这个指针指向结构体
每次声明person结构体的时候,需要写struct person 太繁琐了,所以可以用 typedef,typedef可以定义一个等价的量,

typedef struct person Person;

没有要求 typrdef定义的量,与原来结构体的名字一样,也没规定 头字母要大写,
故,定义指向结构体的指针,

typedef struct person Person;
struct person *sue,*bob;//两个结构体指针
Person *sue,*bob;//两个结构体指针
//两句话等价                                                                                                                                                                                                                              
//一开始这两个指针并没有指向任何一个结构体,因为结构体还没分配内存空间,
//先给结构体分配内存空间,并确定指针指向了它中的元素
//以下可以这么写
Alloc_1D(sue,1,Person);
//它为结构体person分配内存,并把指针sue与内存联系到一起

通过指针访问Person中的元素,和直接访问Person中的元素不同,
为了设定sue中的age元素可以有以下两种写法

(*sue).age=21;
sue->age=21;

你可能感兴趣的:(cuda,c语言,c++,开发语言)