C语言_了解下结构体指针

在C语言中几乎可以创建指向任何类型的指针,包括用户自定义的类型。当然也可以指向结构体,先看一个小案例:

#include <stdio.h>  
#include <string.h>
typedef struct PERSON {
    int age;
    int height;
    char name[15]; 
} Person;
int main (){
    Person p = {28, 178, "phper"};  //别名 
    Person *p_s = &p;                //定义结构体指针        
    printf("%d\t%d\t%s",p_s->age, p_s->height, p_s->name); //等价于 (*p_s).age  (*p_s)表示p_s指向的结构体变量 
    return 0;
}

再看一个案例:

#include <stdio.h>  
#include <string.h>
#include <malloc.h>
typedef struct PERSON {
    int age;
    int height;
    char name[15]; 
} Person;
int main (){

    Person *p_s = (Person *)malloc(sizeof(Person));      //计算结构体Person大小,并分配相应的内存空间,也可以传参(struct PERSON),再强制转化指针格式 
    memset(p_s, 0, sizeof(Person));  //分配好空间内容是随机的,用函数初始化全部清空为0 
    
    //指针指向的是p_s的首地址 
    printf("请输入年龄:");
    scanf("%d", &p_s->age);
    printf("请输入身高:");
    scanf("%d", &p_s->height);
    printf("请输入名字:");
    scanf("%s", p_s->name);
    printf("%d\t%d\t%s",p_s->age, p_s->height, p_s->name); //等价于 (*p_s).age  (*p_s)表示p_s指向的结构体变量 
    return 0;
}

 指向数组结构体的指针案例:

# include <stdio.h>
# include <stdlib.h>
# include <string.h>


//创建一个结构体
struct Programmer
{
    int salary;
    int experience;
    char type[15]; 
    
}programmer[3]=
{
    {18000, 3, "PHP"},
    {15000, 1, "GO"},
    {19000, 3, "JAVA"},
};

int main ()
{
    struct Programmer *pProgrammer;
    int index;
    pProgrammer = programmer;
    for(index=0; index<3; index++,pProgrammer++) //index++后面还有一句控制着指针的移动,循环完一次,指针将指向下一个地址中的成员
    {
        printf("编号%d \n",index+1);
        printf("薪资:%d\n", pProgrammer->salary);
        printf("经验-年:%d\n", pProgrammer->experience);
        printf("岗位:%s\n", pProgrammer->type);
    }
     printf("pProgrammer:%d\n&student[2]:%d\n",pProgrammer,&programmer[3]);        
    return 0;
}

 

posted @ 2018-01-03 16:15  温柔的风  阅读(182)  评论(0编辑  收藏  举报