成员变量指针指向 文字常量区、堆区空间、栈区空间

成员变量指针指向 文字常量区、堆区空间、栈区空间
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct Student
{
	int age;
	//char name[50];
	char *name;
	int score;
};

//成员变量指针指向堆区空间
int main()
{
	struct Student s;
	s.age = 18;

	s.name = (char *)malloc( (strlen("mike") + 1) * sizeof(char));
	strcpy(str.name, "mike");

	s.score = 59;
	printf("%d, %s, %d\n", s.age, s.name. s.score);

	if(s.name != NULL)
	{
		free(s.name);
		s.name = NULL;
	}
	return 0;
}

//成员变量指针指向栈区
int main02(int argc, char const *argv[])
{
	struct Student s;

	s.age = 18;
	
	char buf[100];
	str.name = buf;//指向栈区空间
	strcpy(str.name, "mike");

	s.score = 59;
	return 0;
}

//成员变量指针指向文件常量区的字符串
int main01(int argc, char const *argv[])
{
	struct Student s;

	s.age = 18;
	//strcpy(s.name, "mike");
	str.name = "mike";//指针变量保存字符串常量的首地址 
	s.score = 59;

	return 0;
}

成员指针指向文件常量区
在这里插入图片描述

成员指针指向堆区空间
在这里插入图片描述

成员指针指向栈区空间
在这里插入图片描述

注意事项:

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

struct Student
{
	int age;
	char *name;
	int score;
};

int main(int argc, char const *argv[])
{
	 struct Student *p;

	 //需要给p分配内存
	 p = (struct Student *)malloc(sizeof(struct Student));
	 if(p == NULL)
	 {
	 	printf("分配失败\n");
	 	return -1;
	 }

	 //需要给mike\0分配足够的堆空间,不然还是会出现段错误
	 p->name = (char *)malloc(strlen("mike") + 1);

	 p->age = 18;
	 strcpy(p->name, "mike");
	 p->score = 59;

	 printf("%d, %s, %d\n", p->age, p->name, p->score);
	 
	 //先释放name
	 //再释放p
	 if(p->name != NULL)
	 {
	 	free(p->name);
	 	p->name = NULL;
	 }

	if(p != NULL)
	{
		free(p);
		p = NULL;
	}

	 return 0;
}

猜你喜欢

转载自blog.csdn.net/CCai_x/article/details/84075101