您的位置:首页 > 理论基础 > 数据结构算法

一.学习数据结构之指针和结构体

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);
}




注意事项:

结构体变量不能加减乘除,但可以相互赋值

普通结构体变量和结构体指针变量作为函数参数的传递
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  指针 数据结构 内存