结构体及指针初探究(1)

结构体

C语言已经提供了内置类型,例如:char,short,int ,long,float,double等,但如果我想描述一个事物,单单靠这些内置类型是不够的,例如描述一个学生,或者描述一本书,此时的单一内置类型就是不行的,描述一个学生需要描述身高,体重,学号,成绩等等。为了解决这个问题,我们需要学习结构体这种自定义的数据类型。

现在,我们要描述一个学生的名字,年龄,身高,学号,在结构体中这样表示:

struct Stu
{
    char name[20];
    int age;
    char sex;
    char id;
};

值得注意的是,反大括号后的分号不能掉了。

而对于结构体变量的定义和初始化,我们这样做:

Struct Point
{
    int x;
    int y;
}p1;//声明类型的同时定义变量p1
Struct Point p2;
Struct Point p3 = {10,20};

而如果我们要指定顺序,就要用到“.”操作符:

Struct Stu
{
    char name[15];
    int age;
};

Struct Stu s1 = {"lisi",18};
Struct Stu s2 = {.age=20,.name="wangwu"};

而对于结构体嵌套初始化:

Struct Node
{
    int data;
    Struct Point p;
    Struct Node* next;
}n1 = {10,{4,5},Null};

Struct Node n2 = {20,{5,6},Null};//结构体嵌套初始化

其实就是大括号里再套大括号。

而结构体变量的访问,则依靠"."操作符,使用方式:结构体变量.成员名

#include 

Struct Point
{
    int x;
    int y;
}p = {1,2);

int main()
{
    printf("x:%d y:%d\n", p.x, p.y);
    return 0;
}

指针初探究

在日常生活中,我们会见到酒店的房间上标有房间号

结构体及指针初探究(1)_第1张图片 

而在计算机中,你想找到一个数据,就必须先找到其地址,而这个地址,我们也称其为指针。

 我们可以理解为:内存单元的编号==地址==指针。而我们知道,在C语言中创建变量其实就是向内存中申请空间,例如:

#include 
int main()
{
    int a = 5;
    &a;
    printf("%p\n", &a);
    return 0;
}

我们想要获取a的地址,该怎么做呢,答案是使用取地址操作符"&":

而整型变量占四个字节,所以应该会有四个连续的地址,打印出来的是最小的一个地址。

指针变量

而我们我们想要将变量的地址存储起来,则需要使用解引用操作符"&":

    int a = 5;
    int * pa = &a;

此时指针变量pa的值就是a的值 5,我们对pa的值进行操作就可以间接地将a值改变。

而在64位的计算机下,不同类型指针变量的大小都是8个字节,而他们的区别则是指针解引用的权限(一次能操作几个字节):

#include 
int main()
{
     int n = 10;
    char * pc = (char*)&n;
    int *pi = &n;
    printf("%p\n", &n);
    printf("%p\n", pc);
    printf("%p\n", pc+1);
    printf("%p\n", pi);
    printf("%p\n", pi+1);
    return 0;
}

得到如下结果:

结构体及指针初探究(1)_第2张图片

得出结论:char*类型+1跳过1字节,int*类型+1跳过4字节。

即指针类型觉得指针向前或向后走一步有多大。

---------------------------------------------------------------EOF------------------------------------------------------------------

你可能感兴趣的:(数据结构)