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
指针++ 一次移动一类型那么长的距离
C语言--- 高级指针2(结构体指针,数组作为函数参数)的更多相关文章
- C语言_了解下结构体指针
在C语言中几乎可以创建指向任何类型的指针,包括用户自定义的类型.当然也可以指向结构体,先看一个小案例: #include <stdio.h> #include <string.h&g ...
- go语言之进阶篇结构体指针类型匿名字段
1.结构体指针类型匿名字段 示例: package main import "fmt" type Person struct { name string //名字 sex byte ...
- 嵌入式-C语言基础:通过结构体指针访问结构体数组
#include<stdio.h> #include<string.h> struct Student { char name[32]; int age; int height ...
- C与指针(结构体指针,函数指针,数组指针,指针数组)定义与使用
类型 普通指针 指针数组(非指针类型) 数组指针 结构体指针 函数指针 二重指针 定义方式 int *p; int *p[5]; int (*p)[5]; int a[3][5]; struct{.. ...
- C# 篇基础知识2——运算符、类型转换、流程控制、枚举、结构体和数组、函数
1.运算符.类型转换 计算某年y某月m某日d是周几的基姆拉尔森公式公式:int week = (d + 2*m + 3*(m + 1)/5 + y + y/4 - y/100 + y/400 + 1) ...
- C结构体指针的初步使用
#include <stdio.h> #include <string.h> struct Books { char title[50]; //char author[100] ...
- (60) 结构体指针、结构体变量嵌套、结构体指针嵌套、函数指针、数组指针、指针数组、typedef 综合运用
#include<stdio.h> #include<iostream> #include<malloc.h> /* author : 吴永聪 program: 结 ...
- C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com
原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | I ...
- 【C语言入门教程】7.3 结构体指针的定义和引用
C 语言中指针的操作非常灵活,它也能指向结构体变量对结构体变量进行操作.在学习结构指针之前,需要再次加深对指针的认识.声明指针变量时所使用的数据类型修饰符实际上的作用是定义指针访问内存的范围,如果指针 ...
随机推荐
- UVa 1592 Database (map)
题意:给出n行m列的数据库(数据范围: n 1~10000, m 1~10), 问你能不能找出两行r1, r2,使得这两行中的c1, c2列是一样的, 即(r1,c1)==(r2,c1) && ...
- volatile学习
第一.java内存模型 共享内存模型指的就是Java内存模型(简称JMM),JMM决定一个线程对共享变量的写入时,能对另一个线程可见. 从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之 ...
- 官网Windows 10安装程序驱动下载--截止:2019.01.06版本
说明:鉴于win7,8不可直接再下载原装iOS文件,这份共享程序包是为以后N年做的准备.如果N年后这个包还可以用,就可以省去很多麻烦. 百度网盘分享:https://pan.baidu.com/s/1 ...
- 前端性能优化 —— reflow(回流/重排)和repaint(重绘)
简要:整个在浏览器的渲染过程中(页面初始化,用户行为改变界面样式,动画改变界面样式等)reflow(回流)和repaint(重绘) 会大大影响web性能,尤其是手机页面.因此我们在页面设计的时候要尽量 ...
- Dynamic Web Module 2.3 change to 3.0 maven工程解决办法
pom.xml <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <a ...
- @Transient使用心得
使用注解@Transient使表中没有此字段 注意,实体类中要使用org.springframework.data.annotation.Transient 在写实体类时发现有加@Transient注 ...
- 前端23种js设计模式中参见的7种设计模式的学习
创建型设计模式是一类处理对象创建的设计模式,通过某种方式控制对象的创建来避免基本对象创建时可能导致设计上的问题或增加设计上的复杂度. 1)工厂模式 class Product { constructo ...
- ArrayList类源码浅析(三)
1.看一个示例 运行上述代码,抛出一个异常: 这是一个典型的并发修改异常,如果把上述代码中的125行注释,把126行打开,运行就能通过了: 原因: 1)因为在迭代的时候,使用的是Itr类的对象,在调用 ...
- DS博客大作业--树 (陈梓灿组)
1.树的存储结构说明 定义的结构体中,name是用于存放文件名称,string类型是字符串类型,定义了child孩子结点和brother兄弟结点. 2.树的函数说明 1.main函数 main函数中主 ...
- ActiveMQ配置文档
本文介绍一对一.一对多.持久化.非持久化消息配置方式 一.创建项目 导入jar 二.创建MQ.xml <!-- 配置JMS连接工厂 --> <bean id="connec ...