当前位置:首页 » 密码管理 » 指针访问结构体

指针访问结构体

发布时间: 2022-06-30 13:41:59

c语言指向结构体的指针


  1. C语言中的结构体
    在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问

  2. 定义与声明
    结构体的定义如下所示,struct为结构体关键字,tag为结构体的标志,member-list为结构体成员列表,其必须列出其所有成员;variable-list为此结构体声明的变量。

  3. 结构体成员的引用

    有两种方式,英文的句点 . ,一个减号加一个大于号 ->。

    当结构体是一个指针时要引用结构体的成员就用-> 而如果不是指针就用.。

    如:
    struct msg_st {
    int a;
    };
    struct msg_st msg;
    struct msg_st *ms;
    msg.a = 10;
    ms->a = 20;




⑵ C语言结构体指针成员所指向的变量如何访问

第一种写法:

(*a).p=&b;

.的优先级高于*,(*pointer)两边的括号不能少。如果去掉括号写作*pointer.memberName,那么就等效于*(pointer.memberName),这样意义就完全不对了。

第二种写法:

a->p=&b;

->是一个新的运算符,习惯称它为“箭头”,有了它,可以通过结构体指针直接取得结构体成员;这也是->在C语言中的唯一用途。

结构体是一种数据类型,是一种创建变量的模板,编译器不会为它分配内存空间,就像 int、float、char 这些关键字本身不占用内存一样;结构体变量才包含实实在在的数据,才需要内存来存储。下面的写法是错误的,不可能去取一个结构体名的地址,也不能将它赋值给其他变量。

(2)指针访问结构体扩展阅读:

用指针引用结构体变量成员方式总结与技巧:

一、(*指针变量名).成员名

注意,*p 两边的括号不可省略,因为成员运算符“.”的优先级高于指针运算符“*”,所以如果 *p 两边的括号省略的话,那么 *p.num 就等价于 *(p.num) 了。

因为指针变量 p 指向的是结构体变量第一个成员的地址,即字符数组 name 的首地址,所以 p 和 (*p).name 是等价的。

“等价”仅仅是说它们表示的是同一个内存单元的地址,但它们的类型是不同的。指针变量 p 是 struct 型的,而 (*p).name 是 char* 型的。所以在 strcpy 中不能将 (*p).name 改成 p。用 %s 进行输入或输出时,输入参数或输出参数也只能写成 (*p).name 而不能写成 p。

二、直接用:指针变量名->成员名

来代替,它们是等价的。“->”是“指向结构体成员运算符”,它的优先级同结构体成员运算符“.”一样高。p->num 的含义是:指针变量 p 所指向的结构体变量中的 num 成员。p->num 最终代表的就是 num 这个成员中的内容。

⑶ 如何访问结构体指针的结构体指针成员

1、该种方法用指针指向一个结构体,使用时p->成员名。

struct Studentp;

struct Student stu1={001,“zb”,90.5};

p=&stu1;

printf(“学号 姓名 分数 ”);

printf("%d %s %0.1f ",p->num,p->name,p->score);*/

2、该种方法是定义一个指针变量,只指向一个struct Student的结构体

struct Student* p;

struct Student stu={001,"zhao",90.5};

p=&stu;

printf("学号 姓名 分数 ");

printf("%d %s %0.1f ",(*p).num,(*p).name,(*p).score);*/

(3)指针访问结构体扩展阅读

指向结构体变量的指针

除了通过“结构体变量名.成员名”的方式引用结构体变量中的成员,除了这种方法之外还可以使用指针。&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。

⑷ 我想问一下怎么访问结构体指针变量这个成员谢谢!

最后一句定义了一个stu格式的指针,也就是结构体指针next不是*next

数据类型是 struct stu *,C里面把碰到多字符的数据类型把*写到后面了。

所以next指向一个struct stu的结构体,这就是链表的定义。关于访问问题我写了段程序。

这段程序定义了两种不同的结构体参数申明,begin是直接声明了一个结构体,这种用法调用的话begin是一个结构体的变量,所以使用begin.next调用,如果是list end这样定义个结构体的指针,也可操作结构体,但是最好先malloc开辟一个空间,然后就使用->方式调用,不知道明白了么

⑸ 【请教】c语言里指针访问结构体变量的问题

#include <stdio.h>
int main() {
struct my {
int a;
int b;
int c;
};
struct my ss= {1,2,3};
struct my *ptr=&ss; //此处
printf("%d\n",ptr->a);
return 0;
}

⑹ 如何用二级指针访问结构体成员

对于字符串正确的做法是这样:strcpy(pnew->name, "灰太狼");如果是结构中的数组,则应该用memcpy函数幅值。把分交出来吧

⑺ 举例说明如何利用指针访问结构体中的每一个成员变量


最简单的方法是在CMainForm中定义一个ball的变量,这样只需要在CMainForm的函数中向线程传递this指针,通过this指针访问balll的变量,进而访问ball的成员函数.
使用这种方法也就不需要定义新的结构体了 struct XXX ;XXX A.

⑻ 指向结构体的二级指针怎么访问结构体成员

假设b是一个二级指针,那么*b就是b指向的内容,也就是一个一级指针,而一级指针访问成员是->连起来就是(*b)->sth

⑼ C语言关于指针访问结构体数据的使用

呵呵,很简单,你只要把x堪称一块内存就可以了。

x相当于:

+---------------------------+

|1|2|3|4|1|2|3|4|5|6|7|8|9|a|

+---------------------------+

|---n---|---------str-------|

我们从图中可以看到n其实占了四个字节的内存,而str占了10个字节。

那么str[5]相当于从头开始算跳过了九个字节,那么p[9]就是正好是str[5]的地方,也可以*(p+9)形象的说明了跳过了9个字节。

⑽ 指向结构体的指针应该怎么理解

当一个指针变量指向结构体时,我们就称它为结构体指针。注意,结构体变量名和数组名不同,数组名在表达式中会被转换为数组指针,而结构体变量名不会,无论在任何表达式中它表示的都是整个集合本身,要想取得结构体变量的地址,必须在前面加&,所以给 pstu 赋值只能写作:

struct stu *pstu = &stu1;

而不能写作:

struct stu *pstu = stu1;

还应该注意,结构体和结构体变量是两个不同的概念:结构体是一种数据类型,是一种创建变量的模板,编译器不会为它分配内存空间,就像 int、float、char 这些关键字本身不占用内存一样;结构体变量才包含实实在在的数据,才需要内存来存储。

下面的写法是错误的,不可能去取一个结构体名的地址,也不能将它赋值给其他变量:

struct stu *pstu = &stu;

struct stu *pstu = stu;

(10)指针访问结构体扩展阅读

结构体指针作为函数参数

结构体变量名代表的是整个集合本身,作为函数参数时传递的整个集合,也就是所有成员,而不是像数组一样被编译器转换成一个指针。

如果结构体成员较多,尤其是成员为数组时,传送的时间和空间开销会很大,影响程序的运行效率。所以最好的办法就是使用结构体指针,这时由实参传向形参的只是一个地址,非常快速。

调用中采用的结构体变量。在传入函数时通过指针void *para指针传递过去。需要注意的是不能直接使用para->a来访问结构体的成员。

这是因为para只是接收过来的地址。para虽然指向的结构体的首地址。但是这个指针并不知道自己指向的是什么内容和有多少成员。需要(date *)para强制转化一下。这样para就可以知道自己是什么类型的指针。有多少成员。

热点内容
php办公系统 发布:2025-07-19 03:06:35 浏览:900
奥德赛买什么配置出去改装 发布:2025-07-19 02:53:18 浏览:42
请与网络管理员联系请求访问权限 发布:2025-07-19 02:37:34 浏览:189
ipad上b站缓存视频怎么下载 发布:2025-07-19 02:32:17 浏览:844
phpcgi与phpfpm 发布:2025-07-19 02:05:19 浏览:527
捷达方向机安全登录密码是多少 发布:2025-07-19 00:57:37 浏览:694
夜魔迅雷下载ftp 发布:2025-07-19 00:39:29 浏览:99
增值税票安全接入服务器地址 发布:2025-07-19 00:20:45 浏览:486
solidworkspcb服务器地址 发布:2025-07-18 22:50:35 浏览:823
怎么在堆叠交换机里配置vlan 发布:2025-07-18 22:42:35 浏览:630