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

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

时间: 2024-10-10 01:14:47

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

[转]C语言指针 之 结构体指针

在C语言中几乎可以创建指向任何类型的指针,包括用户自定义的类型.创建结构体指针是极常见的.下面是一个例子: 1 typedef struct 2 { 3 char name[21]; 4 char city[21]; 5 char state[3]; 6 } Rec; 7 typedef Rec *RecPointer; 8 9 RecPointer r; 10 r=(RecPointer)malloc(sizeof(Rec)); r是一个指向结构体的指针.请注意,因为r是一个指针,所以像其他指

C# 篇基础知识2——运算符、类型转换、流程控制、枚举、结构体和数组、函数

1.运算符.类型转换 计算某年y某月m某日d是周几的基姆拉尔森公式公式:int week = (d + 2*m + 3*(m + 1)/5 + y + y/4 - y/100 + y/400 + 1)%7; 除了算数运算符,C#还提供了大量数学函数,这些数学函数归为一类,称为Math 类,其常用函数如下表所示: 表 1?7 Math类中的常用函数 功能 函数 C#示例 数学表示 结果 乘方 Math.Pow() Math.Pow(2,3) 23 8 开方 Math.Sqrt() Math.Sqr

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

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

结构体指针

结构体与指针 1.结构体指针的数值为某个结构体的内存空间的地址,从而指针指向某个结构体. 2.结构体指针的初始值为空(0),不指向任何结构体. 3.malloc操作:创建一个新的内存空间(从内存中选择一个内存空间存储结构体),p指向这个结构体,p的值为这个结构体的内存空间的地址. 4.结构体指针的赋值:一个结构体指针的数值等于另外一个结构体指针的数值,从而两个结构体指针指向相同的结构体.当对某个结构体进行访问时,选择的结构体指针只要满足该结构体指针指向这个结构体即可,即可以有很多种选择. 5.当

结构体指针概要

结构体指针 指针当做函数参数 数组当做函数参数 1.结构体指针 指向结构体变量的指针.称为结构体指针 Student stu ={0}; Student *p = &stu; Student  * 结构体指针类型(类型), p结构体指针变量(变量名); &stu 结构体变量地址(初值) (*p).sex = 'm'; p->sex= 'm'; (*p)对指针取值后是结构体变量,.sex是访问成员变量 使用指针可以指向操作符直接访问结构体成员p->sex 1.结构体指针 结构体指

C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com

原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 本文由 arthinking 发表于315 天前 ⁄ itzhai.com原创文章 ⁄ C语言 ⁄ 评论数 3 ⁄ 被围观 1,775 views+ 指针数组: 在一个数组中,如果它的元素全部都是指针类

当结构体遇上宏定义,以及函数指针的高级写法(结构体中能用宏定义一个函数?)

一.结构体中可以定义一般的宏定义 如: struct aaa{   #define STATUS_1 100   #define STATUS_2 200   #define STATUS_3 300   ........}: 首先,这里的宏定义是在预编译阶段完成的,编译器此时并不知道什么结构体,所以这些宏是全局可见的.   一个宏定义,如果写在结构体之内,即使与结构体之外的宏定义名字重复了最多是编译警告.可是如果不在结构体之内,名字重复可肯定是error.(未证实,可以做实验,而且可以把两处的

C语言 结构体指针赋值 incompatible types when assigning to type &#39;char[20]&#39; from type &#39;char *&#39;

strcpy(pstudent->name, "guo zhao wei "); 为什么错误,该怎么写,(红色行) 追问 为什么不能直接赋值啊, 追答 用char nnnn[20]定义的,用strcpy 用char *ppp定义的,用=来赋值 C语言 结构体指针赋值 incompatible types when assigning to type 'char[20]' from type 'char *'

c语言中结构体指针

1.指向结构体的指针变量: C 语言中->是一个整体,它是用于指向结构体,假设我们在程序中定义了一个结构体,然后声明一个指针变量指向这个结构体,那么我们要用指针取出结构体中的数据,就要用到指向运算符"->". 举例说明: struct SunLL { int a; int b; int c; }; struct SunLL  * p;               //定义结构体指针 struct SunLL A = {1,2,3};    //定义一个SunLL类型的变量A