结构体与指针

若我们用[0x9999]来标记内存地址,则 *[0x9999]表示该地址内存中存储的数值

变量
int a;
a *[0x9999] 1
&a [0x9999]

指针
int* a;
a *[0x8888] [0x9999]
*a *(*[0x8888]) *[0x9999] 1
&a [0x8888]

结构体变量
struct mystruct
{
int a; [0x9991]
int b; [0x9992]
int c; [0x9993]
}s;

s *[0x9991] 1
&s [0x9991]
s.a *[0x9991] 1
&s.a [0x9991]

结构体指针变量
struct mystruct
{
int a; [0x9999]
int b; [0x999A]
int c; [0x999B]
};

struct mystruct* s;
s *[0x8888] [0x9999]
*s *(*[0x8888]) *[0x9999] 1
&s [0x8888]

s->a *(*[0x8888]) *[0x9999] 1
&s->a [0x9999]
*s->a none

数组(很奇怪)
int a[];
&a [0x9999]
a [0x9999]
*a *[0x9999] 1

a[0] *[0x9999] 1
&a[0] [0x9999]

结构体数组(很奇怪)
struct mystruct
{
int a; [0x9999]
int b; [0x999A]
int c; [0x999B]
};

struct mystruct s[];
s[0].a *[0x9999] 1
s[0] *[0x9999] 1
&s[0] [0x9999]

s [0x9999]
*s *[0x9999] 1
&s [0x9999]

结构体与指针

时间: 2024-12-25 15:05:12

结构体与指针的相关文章

黑马程序员 C语言-枚举,结构体,指针

一.枚举 ※枚举变量的定义 前面只是定义了枚举类型,接下来就可以利用定义好的枚举类型定义变量. 跟结构体一样,有3种方式定义枚举变量 1.先定义枚举类型,再定义枚举变量 enum Season {spring, summer, autumn, winter}; enum Season s; 2.定义枚举类型的同时定义枚举变量 enum Season {spring, summer, autumn, winter} s; 3.省略枚举名称,直接定义枚举变量 enum {spring, summer

深入了解Windows句柄到底是什么(句柄是逻辑指针,或者是指向结构体的指针,图文并茂,非常清楚)good

总是有新入门的Windows程序员问我Windows的句柄到底是什么,我说你把它看做一种类似指针的标识就行了,但是显然这一答案不能让他们满意,然后我说去问问度娘吧,他们说不行网上的说法太多还难以理解.今天比较闲,我上网查了查,光是百度百科词条“句柄”中就有好几种说法,很多叙述还是错误的,天知道这些误人子弟的人是想干什么. 这里我列举词条中的关于句柄的叙述不当之处,至于如何不当先不管,继续往下看就会明白: 1.windows 之所以要设立句柄,根本上源于内存管理机制的问题—虚拟地址,简而言之数据的

指针 指针与数组 指针与字符串 指针与函数 结构体与指针 宏

指针 指针与数组 指针与字符串 指针与函数?? 指针与数组 1.数组名:数组元素首地址 eg: int array[3]={1,3,6}; 这里array 恒等于&array[0] 2.int *p = a; int *p = 0; int a[]={0}; 3.int *p = a; 均指向数组的首地址 *p是? *(p+1)是?(*p)+1是? *(p+1)决定向下移动几个字节是类型 4.指针可以当数组名使用 p[1] = 3; 恒等于a[1] ;恒等于*(p+1);恒等于*(a+1) 5.

指向结构体的指针

运用指向结构体数组的指针输出学生信息 说明:指针指向结构体数组,就得到了该结构体数组的起始地址.通过该地址可以访问结构体数组中的所有成员变量.其中,指向结构体的指针的算术运算与 指向数组的指针的用法相似. #include<stdio.h> #define N 10 //结构体类型及变量的定义,初始化 struct student { char *number; char *name; char sex; int age; float score; }stu[3]={{"06001&

代码案例(结构体,函数指针,指针函数,冒泡排序) 修改

#import <Foundation/Foundation.h> typedef struct {     char name[20];     int age;     float score; }Stu; //建立字符串和函数之间的一一对应关系. typedef BOOL (*PStu) (Stu stu1,Stu stu2) ; typedef struct nameFunctionPair{     char name[20]; //存储函数对应的字符串     PStu funct

【C语言】用结构体数组指针完成:有三个学生信息,存放在结构体数组中,要求输出全部信息

//用结构体数组指针完成:有三个学生信息,存放在结构体数组中,要求输出全部信息 #include <stdio.h> struct Stu { int num; char name[20]; char sex; int age; }; int main() { struct Stu student[3]={{317,"han",'m',20},{318,"hun",'w',22},{311,"dan",'w',18}}; struct

EDKII CR宏:根据成员指针获取父结构体变量指针

核心提示: 1. CR宏 (Containing Record):根据成员指针获取父结构体变量指针 2. 0 指针的妙用. 在EDKII 的代码中有不少关于CR宏的使用,如 时钟中断处理函数CoreTimerTick. VOID EFIAPI CoreTimerTick ( IN UINT64 Duration ) { IEVENT *Event; ... if (!IsListEmpty (&mEfiTimerList)) { Event = CR (mEfiTimerList.Forward

C Language Study - 结构体成员指针初始化

结构体成员指针初始化 不可以正确运行的初始化方式(1): #include <stdio.h> #include <string.h> #include <malloc.h> //#include "a.h" //char a[100]; struct stu { char* name; int num; }*pst,st; void init_pst() { pst = (struct stu *)malloc(sizeof(struct stu)

代码案例(结构体,函数指针,指针函数,冒泡排序)

typedef struct {     char name[20];     int age;     float score; }Stu; #import <Foundation/Foundation.h> //姓名升序 void sortByName(Stu *p , int count ) {     for (int i = 0 ; i < count -1; i ++) {         for (int j= 0 ; j < count -1-i; j ++) {

结构体指针和结构体成员指针

在添加sqlite3的加解密功能函数时,由于网上资料针对的版本是旧版sqlite3源码,现在新版上做修改遇到了一个宏,该宏是旧版上的,它作用是由结构体成员指针pData找到它所属的结构体指针.下面转的文章详解了这种机制. 1.通过结构体成员指针寻找其所属结构体指针 转自http://blog.csdn.net/mycwq/article/details/9327743 宏CONTAINING_RECORD,可以直接根据结构体成员指针找到结构体指针. 我们看一下它的定义: 1 #define CO