指针和数组的复习
总结:
指针 变量的运算:
指针变量不能相加,不能相乘,也不能相除
如果这两个指针所指向的是同一个连续空间中的不同存储单元
则这两个元素就能想减
一个指针变量到底占几个字节?
解答:
一个指针变量,无论它所指向的变量有多少个字节.都是4个字节
该变量本身都只占4个字节
一个变量的地址是用该变量的首字节来做地址的。
预备知识:
sizeof (数据类型)
功能:返回值就是该数据类型所占的字节数
sizeof(变量名)
功能:返回值是该变量所占的字节数
专题:
动态内存的分配
传统数组的是缺点的:
1.数组长度必须事先制定,而且只是一个常数,不能是变量。
- #include <stdio.h>
- void show(int *q)
- {
- int b[6] = {1,2,3,4,5,6};
- *q = 88;
- }
- void show1(int *q)
- {
- /*
- show函数定义的数组,在show函数执行完毕过后,那么里面的数组b我也不能使用。
- 传统定义方式的数组不能跨函数使用。
- */
- }
- int main(void)
- {
- /*
- 1.数组长度是先规定的,而且只能是整型的常量,不能是变量。
- int b = 9;
- int a[5] = {1,2,3,4,5}; //4 个字节 5个数字 4×5 = 20个字节。
- */
- /*
- 2.传统形式定义的数组,该数组的内存程序员是没有办法手动去释放它。
- 在一个函数运行期间,系统为该函数数组所分配的内存空间是没有办法手动释放的
- 除非该函数执行的程序自动结束,系统才会把这个函数释放掉。
- int a[5] = {1,2,3,4,5}; //4 个字节 5个数字 4×5 = 20个字节。
- show(a);
- */
- /*
- 数组的长度一旦定义,其长度就不能更改\
- 因为数组是一个常量.所以不能被更改。
- int a[5] = {1,2,3,4,5};
- a[6] = {1,2,3,4,5,6};
- */
- int a[5] = {1,2,3,4,5};
- show(a);
- return 0;
- }
- /*
- main函数结束完毕过后才自动释放掉。
- */
为什么需要动态的内存分配
动态数组很好的解决了传递数组的缺陷
传统数组也是叫做静态数组
- #include <stdio.h>
- #include <malloc.h>
- int main(void)
- {
- int i =5; //分配4个字节
- int *p = (int *)malloc(4);
- /*
- 1.要使用malloc函数,必须添加malloc.h文件头
- 2.malloc函数只有一个形参,并且形参是整型
- 3.4表示请求系统为本程序分配4个字节
- 4.malloc函数只能返回第一个字节的地址
- 5.第六行是分配了8个字节。 *p是一个字节,p所指向的内存也占了4个字节。
- 6.p本身所占的内存是静态分配的,而p所指向的内存地址是动态分配的。
- */
- *p = 8; //*p代表的是一个int变量,只不过×p这个整型变量分配内存存储方式不同
- free(p); //表示把p所指向的内存给释放掉,但是p本身是一个内存是静态的,不能由程序员手动释放,p本身内存只能让那个
- //p变量所在的函数运行终止时由系统自动释放掉。
- printf("%d",*p);
- return 0;
- }