目的
在昨天是我们学习C语言的最后一天,在我看来也是最难的一天。昨天我们学习了指针和结构体,不得不说指针是真的很难理解,数组和指针之间还存有一些联系,这么一联系就更加令人头秃了。
学习
1.指针
如何定义一个指针变量:
例如
//'*'声明/定义变量 表示一个指针变量
int *a;//定义了一个指针变量,所指向的内存空间只能用来存放整数!无法存值,因为没有为他分配可以存值得内存空间
int a;
float b;
int *pa=&a;//正确 '&'取某个变量的地址
int *pb=&b;//不正确,因为整型指针只能存放整型数据的地址
int *pc=NULL;//定义指针的时候一定要赋初值,不确定就给NULL
int d=100;
//'*'访问某个地址的值
int *pd=&d;
*pd=21;//访问pd地址里的数据 赋值为21;
如果想给指针指向的区域赋值有三种方法
1.指针变量已经指向某块区域
2.指针指向一个数组
3.动态分配内存
第三种是如何分配动态内存的呢?
在头文件"stdlib.h"中
malloc realloc free方法可以为我们所用
变量类型 p=malloc(内存大小sizeof(变量类型))
int<stdio.h>
int"stdlib.h"
int main()
{
int *p = NULL;
p = (int*)malloc(sizeof(int)*10);
return 0;
}
这样我们就为指针指向的地址分配了40个字节的内存空间
自己分配的内存空间需要自己释放
使用free函数
int<stdio.h>
int"stdlib.h"
int main()
{
int *p = NULL;
p = (int*)malloc(sizeof(int)*10);
free(p);
return 0;
}
当之前分配的内存不够了 就需要在之前的基础上重新分配
realloc函数必须是之前使用malloc分配过的;如果是系统分配的内存是不能用realloc的;
int<stdio.h>
int"stdlib.h"
int main()
{
int *p = NULL;
p = (int*)malloc(sizeof(int)*10);
p=realloc(p;4*sizeof(int));//使用后指针重新指向了realloc分配的内存空间,并将malloc分配的内存空间里面的内容复制过去
free(p);
return 0;
}
数组和指针的关系
指针变量有内存空间;
数组名没有内存空间;
定义一个指针变量,只为指针分配有8个字节的内存空间,且不能存值;
定义数组 系统会分配内存空间
2.结构体
结构体是一种数据类型 复合数据类型
struct people//声明一种类型
{
char name[10];
int age;
};
struct people xw,xl;//定义结构体变量 分配空间
xw.name;//引用结构体变量
xl.age;
结构体内存的计算
1.结构体整体空间是占用空间最大的成员(的类型)所占字节数的整数倍。
2..结构体的每个成员相对结构体首地址的偏移量都是最大基本类型成员字节大小的整数倍,如果不是编译器会自动补齐。
struct people{
char name;
int a;
double b;
}
这个结构体的占用成员最大的是double类型;那么计算如图:计算
假如是下面
struct people{
char name;
int a;
char b;
}
计算如图:
计算
写在后面
昨天讲的太多了,俺现在只能写这些浅显的东西,那个链表让我看看在写,俺觉得俺是个垃圾,不过垃圾还能回收再利用呢!万一身价*100,说不定还能值十块钱呢!再让我看看学习学习。