我的个人网站:
http://riun.xyz
---
我是一名在校大学生,以下纯属个人观点,都是经过我反复思考过的东西,我感觉这些东西在我学c时带了了许多不便,学校讲的也不好,只能自学。
若您发现任何错误,请发到我邮箱1195264226@qq.com 进行纠正,非常感谢!
在讲这个问题之前要先纠正一个大多数人嘴边的错误:
为一个指针申请内存,并不是人们理解的那个‘为’指针申请空间,
而是单独申请一个空间,把这个空间的地址给指针,
申请空间时都是这样的格式:
p=(type*)malloc(sizeof(type)*n);
那个等号的意义是:把这块空间的地址赋给p,比如这块单独申请的空间地址是0xa11,那么p里面存储的地址就是0xa11,
只是简单的把p指向了那块空间,指针本身的空间是不会变的,这个可以做一个实验:
char *p;
printf("%d\n",sizeof(p));
p = (char*)malloc(sizeof(char)*100);
printf("%d\n",sizeof(p));
输出的数是一样的,这里要讲一下sizeof的功能
sizeof用于输出变量占的字节数,就是占的内存是多少
可以看到并没有因为 ‘为’ 指针申请了空间这个指针的内存就变大,也就是说,并不是所谓的 ‘为’ 指针申请空间
大家都知道指针是存放地址的
这个指针还是那个指针,只是指针存放的地址改变了,变成了一块申请了了的内存地址。
那么,指针申请内存后到底都有什么区别呢?
首先,如果不申请内存给指针,那么这个指针只能用来改变指向,就是说这个指针只能指指这里指指那里,不能对指针进行输入操作
因为如果对没有分配内存的指针进行输入的话,让你自己想想,指针只是存放地址的容器,你这个输入到底输到了哪呢?
所以直接对指针进行输入操作的地方,都要为指针申请空间。
今天有事,后续更新。。。。。。