成员变量指针指向 文字常量区、堆区空间、栈区空间
#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;
}