• 指向结构体的指针


     在C语言中几乎可以创建指向任何类型的指针,包括用户自定义的类型。创建结构体指针是极常见的。下面是一个例子:

     typedef struct

    {
    char name[21];
    char city[21];
    char state[3];
    } Rec;
    typedef Rec *RecPointer;

    RecPointer r;
    r=(RecPointer)malloc(sizeof(Rec));

    r是一个指向结构体的指针。请注意,因为r是一个指针,所以像其他指针一样占用4个字节的内存。而malloc语句会从堆上分配45字节的内存。*r是一个结构体,像任何其他Rec类型的结构体一样。下面的代码显示了这个指针变量的典型用法:

    strcpy((*r).name, "Leigh");
    strcpy((*r).city, "Raleigh");
    strcpy((*r).state, "NC");
    printf("%sn", (*r).city);
    free(r);

    您可以像对待一个普通结构体变量那样对待*r,但在遇到C的操作符优先级问题时要小心。如果去掉*r两边的括号则代码将无法编译,因为“.”操作符的优先级高于“*”操作符。使用结构体指针时不断地输入括号是令人厌烦的,为此C语言引入了一种简记法达到相同的目的:

    strcpy(r->name, "Leigh");

    r->这种写法和(*r).是完全等效的,但是省去了两个字符。

  • 相关阅读:
    c文件操作库
    双链常用操作2
    双向链表常用操作
    c队列操作
    c日期格式化操作之date
    单链常用操作类
    c字符串常用操作
    双向链表通用类
    c栈操作
    poj2509
  • 原文地址:https://www.cnblogs.com/youxin/p/2520552.html
Copyright © 2020-2023  润新知