结构体成员指针(如何访问结构体指针的结构体指针成员)
本文目录
如何访问结构体指针的结构体指针成员
1、该种方法用指针指向一个结构体,使用时p-》成员名。
struct Student p;
struct Student stu1={001,“zb”,90.5};
p=&stu1;
printf(“学号\t姓名\t分数\n”);
printf("%d\t%s\t%0.1f\n",p-》num,p-》name,p-》score);*/
2、该种方法是定义一个指针变量,只指向一个struct Student的结构体
struct Student* p;
struct Student stu={001,"zhao",90.5};
p=&stu;
printf("学号\t姓名\t分数\n");
printf("%d\t%s\t%0.1f\n",(*p).num,(*p).name,(*p).score);*/
扩展资料
指向结构体变量的指针
除了通过“结构体变量名.成员名”的方式引用结构体变量中的成员,除了这种方法之外还可以使用指针。&student1 表示结构体变量 student1 的首地址,即 student1 第一个项的地址。如果定义一个指针变量 p 指向这个地址的话,p 就可以指向结构体变量 student1 中的任意一个成员。
用指针引用结构体变量成员的方式是:(*指针变量名).成员名
注意,*p 两边的括号不可省略,因为成员运算符“.”的优先级高于指针运算符“*”,所以如果 *p 两边的括号省略的话,那么 *p.num 就等价于 *(p.num) 了。
从该程序也可以看出:因为指针变量 p 指向的是结构体变量 student1 第一个成员的地址,即字符数组 name 的首地址,所以 p 和 (*p).name 是等价的。
但是,“等价”仅仅是说它们表示的是同一个内存单元的地址,但它们的类型是不同的。指针变量 p 是 struct STUDENT* 型的,而 (*p).name 是 char* 型的。所以在 strcpy 中不能将 (*p).name 改成 p。用 %s 进行输入或输出时,输入参数或输出参数也只能写成 (*p).name 而不能写成 p。
C语言结构体成员指针初始化问题
问题:(一)中的student.name并未初始化,为什么能赋值成功?
stu.name = "jim"; "jim"; 是字符串常量,系统自动为他分配了内存并保存这些字符,执行赋值操作是,将这个字符串的首地址复制给 stu.name。
(二)偶用strcpy_s函数时有疑问,strcpty(str1,int,str2)中 sizeof(str1)》int&∫》sizeof(str2)
strcpy_s和strcpy()函数的功能几乎是一样的。strcpy函数,就象gets函数一样,它没有方法来保证有效的缓冲区尺寸,所以它只能假定缓冲足够大来容纳要拷贝的字符串。在程序运行时,这将导致不可预料的行为。用strcpy_s就可以避免这些不可预料的行为。
这个函数用两个参数、三个参数都可以,只要可以保证缓冲区大小。
三个参数时:
errno_t strcpy_s(
char *strDestination,
size_t numberOfElements,
c***t char *strSource
);
两个参数时:
errno_t strcpy_s(
char (&strDestination),
c***t char *strSource)
例如:
char *str1=NULL;
str1=new char;
char str;
strcpy_s(str1,20,"hello world");//三个参数
strcpy_s(str,"hello");//两个参数但如果:char *str=new char;会出错:提示不支持两个参数
更多文章:
ajax请求数据失败(我用Ajax请求数据,但是老不成功提示如下图:然后下面是代码)
2026年4月19日 08:20
二进制编码转换器工具(求十进制数和float二进制码互相转换的软件或者excel函数)
2026年4月19日 07:40
threadripper怎么读(目前**的电脑配置是怎样的)
2026年4月19日 07:00
shadow puppet(我们中国的传统文化有许多就好像剪纸 英文怎么写)
2026年4月19日 06:40
javascript网页去广告代码(javascript 右下角 广告代码)
2026年4月19日 06:20
restful目前来说是完美的(python有什么高性能的restful模块没)
2026年4月19日 06:00
ospf报文类型有哪些(OSPF的3种数据库、4种接口类型、5种报文类型都是哪些)
2026年4月19日 05:20



