我是C的新手,我在练习时遇到了这个问题.
结构:
typedef struct {
char name[20];
int score[3];
int no;
} Student;
Run Code Online (Sandbox Code Playgroud)
初始化:
Student *pStudent;
strcpy(pStudent->name,"Kven");
pStudent->score[0]=1;
pStudent->score[1]=2;
pStudent->score[2]=3;
pStudent->no=1;
Run Code Online (Sandbox Code Playgroud)
如果"pStudent"不是指针,我可以把它弄好.但如果它是一个指针,我总会得到一个"错误访问"错误.如果我必须使用指针,如何解决?谢谢.
类型指针的变量将地址存储在另一个变量的内存中(它指向另一个变量).
您的变量pStudent
未初始化.它没有任何意义.实际上,它包含一些垃圾值,大多数情况下,它是不允许程序写入的内存区域的地址.这就是为什么当你试图在那里写(调用strcpy()
)时,操作系统会把你的程序打到它的"手"上,然后用你提到的错误信息终止它.
指针的一种用法是指向静态分配的某个变量(在程序中定义):
Student s, *pStudent = &s;
Run Code Online (Sandbox Code Playgroud)
此示例声明了s
类型Student
的变量pStudent
和指向它的变量.注意它被初始化,&s
其地址是s
.现在,您的代码用于pStudent
初始化字段s
.
指针的另一个用法是在运行时动态分配内存:
Student *pStudent;
pStudent = malloc(sizeof(Student));
Run Code Online (Sandbox Code Playgroud)
在这种情况下,pStudent
使用Student
通过调用在运行时(它没有名称)创建的新类型变量的地址初始化malloc()
.malloc()
分配一块内存(指定大小)并返回其地址.
当您不需要它时,您必须释放malloc()
(使用free()
)分配的内存以供重用:
free(pStudent);
Run Code Online (Sandbox Code Playgroud)
在此调用之后,变量的值pStudent
不会更改,它仍然指向相同的地址,但它无效并使用它会产生未定义的行为.在再次使用之前,您必须将另一个Student
结构的地址pStudent
(使用此处介绍的两种方法之一)放入其中.
归档时间: |
|
查看次数: |
1874 次 |
最近记录: |