一.学习数据结构之指针和结构体
2016-01-03 10:30
274 查看
1.1指针的重要性
内存是可以被CPU直接访问的,硬盘不行主要靠地址总线,数据总线,控制总线具体的总线的解释 来自于博客园 Copyright © zhliao
1.2指针的定义
1.2.1地址:地址就是内存单元的编号
从0开始的非负整数
范围:0–FFFFFFFF[0-4G-1](地址线是32位,刚好控制2的32次)
1.2.2指针:
指针就是地址 地址就是指针
指针变量是存放内存单元地址的变量
指针的本质是一个操作受限的非负整数(不能加乘除,只能减)
int * p;//p表示指针变量名,int*表示p变量只能是存放int类型的变量的地址 int i=6; p=&i;//p指向i *p=10;//含义:*p就等价于i
注意:1.指针变量也是变量,只不过它存放的不能是内存单元的内容,只能存放内存单元地址的内容
2.所有的指针变量只占4个字节,用第一个字节的地址表示整个变量的地址
1.3指针与数组
数组名是存放了第一个数组的第一个字节的地址代码如下
#include<stdio.h> int main(void) { double * p; double x = 44.3; p = &x;//x占了8个字节 1个字节是8位 一个字节代表一个地址 double arr[3] = { 1.1,1.2,1.3 }; double *q; q = &arr[0]; printf("%p\n", q);//%p是十六进制输出 p = &arr[1]; printf("%p\n", p); return 0; }
讲解:
输出结果:
解释原因(q和p相差8位):
总结:
1.4结构体
1.4.1.结构的出现的目的:为了表示一些复杂的数据,而普通的基本类型变量无法满足要求1.4.2结构体的定义:结构体是用户根据实际需要自己定义的复合数据类型
1.4.3使用结构体
#include<stdio.h> #include<string.h> struct Student { int sid; int sage; char name[200]; }; void SetValue(struct Student *pst); int main(void) { //-------------第一种方法赋值---------------- /*struct Student st = {34,34,"ll"}; strcpy_s(st.name, "yanlei"); st.sage = 20; st.sid = 12; printf("%s %d %d\n", st.name, st.sage, st.sid);*/ //-------------第二种方法赋值---------------- /*struct Student st;//分配了内存空间,只是得到的是一个垃圾数据,随机的 struct Student *pst = &st; strcpy_s(pst->name, "yanglei"); pst->sage = 88; pst->sid = 77; printf("%s %d %d\n", st.name, st.sage, st.sid);*/ //--------------函数进行赋值----------------- struct Student st; SetValue(&st); return 0; } void SetValue(struct Student *pst) { strcpy_s(pst->name, "yanglei"); pst->sage = 22; pst->sid = 111; printf("%s %d %d\n", pst->name, pst->sage, pst->sid); }
注意事项:
结构体变量不能加减乘除,但可以相互赋值
普通结构体变量和结构体指针变量作为函数参数的传递
相关文章推荐
- 关于指针的一些事情
- IE7降低内存和降低CPU的几个技巧
- C#数据结构之顺序表(SeqList)实例详解
- 如何高效的使用内存
- DOS下内存的配置
- Lua教程(七):数据结构详解
- XP/win2003下发现1G的内存比512M还慢的解决方法
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- PowerShell实现动态获取当前脚本运行时消耗的内存
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#数据结构之单链表(LinkList)实例详解
- C#实现把dgv里的数据完整的复制到一张内存表的方法
- SQL语句实现查询SQL Server内存使用状况
- C# Pointer指针应用实例简述
- C语言内存对齐实例详解
- 数据结构之Treap详解
- C++智能指针实例详解
- 深入学习C语言中memset()函数的用法
- C++指向函数的指针实例解析