概述
目录
1:结构体指针的定义和访问其实和普通的指针一样:
1.1直接定义指针并赋值:
1.2让指针指向一个malloc空间再赋值:
1.3让指针指向malloc了n个sizeof( )空间再赋值:
2.使用结构体指针注意点:
2.1.如果用结构体指针,就不能用(点运算符)访问结构体中的变量,要用 ->
2.2.指针要注意是否是野指针或者NULL,非法内存,会段错误,使用前要malloc
2.3.如果结构体指针发生偏移。则是偏移整个结构体的大小。
2.4.给数组赋值字符串,用strcpy( ) 。
3.详细代码如下:
1:结构体指针的定义和访问其实和普通的指针一样:
类比如下:
类型 变量名
普通指针: char *p;
结构体指针:struct Student *p;
给下面3个小点的结构体指针的定义先定义一个结构体:
struct Student {
char name[128];
int score;
};
1.1直接定义指针并赋值:
char *p = {abcdef};
struct Student *p = {"张三",100};
1.2让指针指向一个malloc空间再赋值:
char *p = (char *)malloc(sizeof(char));
struct Student *p = (struct Student *)malloc(sizeof(struct Student));
p.name = "张三";
p.score = "100";
1.3让指针指向malloc了n个sizeof( )空间再赋值:
char *p = (char *)malloc(n * sizeof(char)); //相当于字符串数组
strcpy(p,"abcdef");
struct Student *p = (struct Student *)malloc(n * sizeof(struct Student)); //相当于数组,数组里的每一个元素存放着一个结构体,malloc也是一种定义数组的方式
p[0].name = "李四";
p[0].score = "99";
p[1].name = "王五";
p[1].score = "88";
不写了,想表明的意思就是相当于一个数组来使用,实际使用for循环遍历一下就好啦。
2.使用结构体指针注意点:
2.1.如果用结构体指针,就不能用(点运算符)访问结构体中的变量,要用 ->
比如:stu.score = 50; 变成 stu->score = 50;
2.2.指针要注意是否是野指针或者NULL,非法内存,会段错误,使用前要malloc
比如:struct Student *p;(野指针) 或 struct Student *p = NULL;
2.3.如果结构体指针发生偏移。则是偏移整个结构体的大小。
struct Student
{
char name[128];
int score;
};
struct Student *p = {"李四",100};
如果这个结构体发生指针的偏移p++,则是char name[128] 有128位 加上 int score 有4位,一共偏移了132位字节。
2.4.给数组赋值字符串,用strcpy( ) 。
char name[128];
strcpy(name,"abcedf");
相当于:char name[128] = "abcedf";
3.详细代码如下:
#include <stdio.h>
#include <stdlib.h>
struct Student
{
char name[128];
int score;
};
int main()
{
struct Student stu;
strcpy(stu.name,"张三");
stu.score = 50;
printf("名字:%s,分数:%dn",stu.name,stu.score);
puts("==================================================================");
struct Student *p; //野指针
//p.score = 100; //如果用结构体指针,就不能用点运算符访问结构体中的变量,要用->
p = (struct Student *)malloc(sizeof(struct Student));
p->score = 100;
strcpy(p->name,"李四");
printf("名字:%s,分数:%dn",p->name,p->score);
free(p); //malloc的空间被释放,这样malloc的空间不会因为下一行p = &stu;而被弃用造成内存泄漏
p = &stu; //指针是存放地址的变量,之前指向malloc的那块空间,现在指针变量存放的是stu的地址
printf("名字:%s,分数:%dn",p->name,p->score);
puts("===================================================================");
printf("地址是:%pn",p++); //p++指针偏移了一个空间的大小,128+4 = 132位
printf("地址是:%pn",p);
system("pause");
return 0;
}
最后
以上就是粗犷金毛为你收集整理的C语言:结构体指针1:结构体指针的定义和访问其实和普通的指针一样:2.使用结构体指针注意点:3.详细代码如下:的全部内容,希望文章能够帮你解决C语言:结构体指针1:结构体指针的定义和访问其实和普通的指针一样:2.使用结构体指针注意点:3.详细代码如下:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复