C语言--- 高级指针2(结构体指针,数组作为函数参数)

时间:2023-03-09 12:45:10
C语言--- 高级指针2(结构体指针,数组作为函数参数)

一、结构体指针

1. 什么是结构体指针?指向结构体变量的指针

    结构体:     typedef  struct stu{

                         char name[20];

                         char sex;

                         int age;

                   }Student;

    Student stu1 = {"zhangsan",'m',23};

    Student *p = &stu1;

p就是结构体指针,存放结构体变量第一个成员的地址.

    Student stu2 ={"lisi",'m',26};

    *p = stu2;

    (*p).sex = 'f'; 修改结构体变量(通常用p->sex = 'f')

2. 结构体数组与指针的关系

      Student stus[5] = {

             {"zhangsan",'m',23},

              {"lisi",'f',24},

              {"wangwu",'m',28},

               {"zhangda",'m',17},

               {"qianer",'f',22}

       }

      Student *p1 = &stus[3];p指向stu[0]的首地址,地址长度是Student型的长度

      Student *p2 = stus;数组名代表数组的首地址,即数组首元素(stu[0])的地址.

      将zhaoda的性别改成女,p1->sex = 'f';

  3. struct student{

        char *name;

      }

      成员定义成char name[20],区别?

       char name[20] 占20个字节,实实在在存在于内存中.

       char *name 占8个字节指向常量区的名字,自己并不存在,是一个地址,是一个指针.

4. 数组作为函数参数的时候,其实传递给函数的是数组的首地址.

      声明:printMaxValueOfArray(int  a[100]);

       系统默认:printMaxValueOfArray(int *a);

       也就是说不管定义中a[200]还是a[100],系统默认的都是数组a的首地址即a.

 注意:要么定义成int a[],要么定义成int *a,两个后面都要有int  count;

        主函数:printMaxValueOfArray(a,sizeof(a)/sizeof(a[0]));

5. 指针可以当做数组用

  void printArray(int *arr,int count);

  void printArray(int *arr,int count){

            for (int i = o; i < count; i++){

                print("%d ",arr[i]);

              }

         }

    指针可以当做数组用,数组也可以当指针用

注意: 数组作为函数参数,形参仅代表数组首元素地址,需要出传入个数

 6. 字符串与指针

  字符串其实就是字符数组

file:///Users/lanou3g/Library/Containers/com.tencent.qq/Data/Library/Application%20Support/QQ/Users/787053796/QQ/Temp.db/C744E1C4-8B16-4A06-AB53-1A8E69F411D6.png

指针++ 一次移动一类型那么长的距离