数据结构复习之C语言指针与结构体
数据结构指针复习:
#include <stdio.h> void main()
{
int a[] = {, , , , }; // a[3] == *(3+a) printf("%d\n", *(+a)); // a[3] 4
printf("*a其实就是a[0]: %d\n", *a); // 8 // 地址是连续的
printf("%p\n", a+);
printf("%p\n", a+);
printf("%p\n", a+);
}
一维数组名是个指针常量,它存放的是一维数组第一个元素的地址,它的值不能被改变,
一维数组名指向的是数组的第一个元素的地址。(获取)修改一个数组,就是要把数组的第一个元素的地址和数组的长度传递进去就行了。
#include <stdio.h> void Show_Array(int *p, int len)
{
p[] = -;
int i; for(i = ; i < len; i++)
{
p[i] = p[i] + ;
printf("%d\n", p[i]);
} } int main(void)
{
int a[] = {, , , , }; Show_Array(a, ); // a等价于&a[0], &a[0]本身就是int *类型 return ;
}
通过函数修改实参的值:
#include <stdio.h> void f(int *p)
{
*p = ;
} int main(void)
{
int i = ; f(&i);
printf("%d\n", i); return ;
}
结构体使用概述:
结构体只有属性,没有方法。结构体是类的一个过渡。
为什么会出现结构体?
为了表示一些复杂的数据,而普通的基本类型无法满足要求。
什么叫结构体?
结构体是用户根据实际需要自己定义的复合数据类型。
#include <stdio.h>
#include <string.h> struct Student // 定义了一个新的数据类型
{
int sid;
char name[];
int sage; }; // 分号不能省 int main(void)
{
// 定义一个数据类型是struct Student的变量st
struct Student st = {, "zhangsan", };
printf("%d %s %d\n", st.sid, st.name, st.sage); st.sid = ;
strcpy(st.name, "lisi");
st.sage = ;
printf("%d %s %d\n", st.sid, st.name, st.sage); return ;
}
#include <stdio.h> struct Student
{
int sid;
char sname[];
int sage;
}; int main(void)
{
struct Student st = {, "zhangsan", }; // st.sid // 定义一个指针变量
struct Student *pst;
pst = &st;
pst->sid = ; // 等价于(*pst).sid, st.sid return ;
}
结构体的实现,两种方式:
struct Student st = {1000, "zhangsan", 20};
struct Student *pst = &st;
1. st.sid
2. pst->sid
pst所指向的结构体变量中的sid这个成员
pst是指向结构体变量的指针,*pst就是st
int *p;
p是指针变量,*p是普通变量。
注意:
结构体变量不能加减乘除,但可以相互赋值
普通结构体变量和结构体指针变量作为函数传参的问题
数据结构复习之C语言指针与结构体的更多相关文章
- c语言指针与结构体
#include <stdio.h> #include <stdlib.h> struct mydata { int num; ]; }; void main1() { /*i ...
- c语言指针与结构体之内存动态分配
struct dangdangtest { ]; ]; ]; int num; int bugnum; ]; ]; double RMB; }; void main2() { //struct dan ...
- [todo0211]c语言指针,结构体的疑问
#include <stdio.h> #include <mm_malloc.h> struct ListNode { int val; struct ListNode *ne ...
- Android For JNI(五)——C语言多级指针,结构体,联合体,枚举,自定义类型
Android For JNI(五)--C语言多级指针,结构体,联合体,枚举,自定义类型 我们的C已经渐渐的步入正轨了,基础过去之后,就是我们的NDK和JNI实战了 一.多级指针 指针的概念我们在前面 ...
- 【学习笔记】【C语言】指向结构体的指针
1.指向结构体的指针的定义 struct Student *p; 2.利用指针访问结构体的成员 1> (*p).成员名称 2> p->成员名称 3.代码 #include < ...
- C语言--- 高级指针2(结构体指针,数组作为函数参数)
一.结构体指针 1. 什么是结构体指针?指向结构体变量的指针 结构体: typedef struct stu{ char name[ ...
- 嵌入式-C语言:通过结构体指针操作结构体内容
#include<stdio.h> #include<string.h> struct Student { char name[32]; int age; int height ...
- 嵌入式-C语言基础:通过结构体指针访问结构体数组
#include<stdio.h> #include<string.h> struct Student { char name[32]; int age; int height ...
- C语言中的结构体
用户自己建立自己的结构体类型 1. 定义和使用结构体变量 (1).结构体的定义 C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体. (2).声明一个结构体类型的一般形式为: ...
随机推荐
- 批量改ID 行形式
update [Temp_Sql] set ID(字段) = (274+ID(字段)) 字段+字段形式 可以以行形式批量修改
- CentOS 中安装tomcat
1.安装tomcat前,需要安装JDK 2.下载tomcat安装包 wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-8/v8.5.31/bin ...
- Markdown 语法快速入门手册
Markdown 是一种轻量级标记语言,能将文本换成有效的XHTML(或者HTML)文档,它的目标是实现易读易写,成为一种适用于网络的书写语言. Markdown 语法简洁明了,易于掌握,所以用它来写 ...
- sharepoint_study_2
描述:向SharePoint中批量添加用户 解决:原文地址:http://bbs.winos.cn/thread-89236-1-1.html 一般情况下,要想登录SharePoint server ...
- POJ - 3764 01字典树+前缀异或和
异或关于前缀的特性:[u,v]=[1,u]^[1,v] 注意是路径,假设1为根,prexor[1]不保留数值 /*H E A D*/ int to[maxn<<1],nxt[maxn< ...
- while循环、运算符和格式化输出以及编码
一.while循环 1.while就是当的意思,while指当其后面的条件成立,就执行while下面的代码 写一段代码让程序从0打印到100的程序,每次循环+1. count = 0 while co ...
- 转 UTL_FILE Throws ORA-29284 Or ORA-29283 When Attempting To READ File
APPLIES TO: PL/SQL - Version 9.2.0.8 and laterInformation in this document applies to any platform.* ...
- python 获取子目录下的所有文件的路径
import os pathss=[] for root, dirs, files in os.walk(tarpath): path = [os.path.join(root, name) for ...
- VUE中toast的使用与开发
在这篇文章中介绍了toast是什么,这篇文章主要介绍toast的开发与使用. 开发 Vuejs很流行,并且官方也给出了路由插件vue-router.数据管理插件vuex,但是我们仅仅停留在了使用的阶段 ...
- cloudemanager安装时出现failed to receive heartbeat from agent问题解决方法(图文详解)
不多说,直接上干货! 安装cdh5到最后报如下错误: 安装失败,无法接受agent发出的检测信号. 确保主机名称正确 确保端口7182可在cloudera manager server上访问(检查防火 ...