c语言指针申请空间问题(简单)
答案:5 悬赏:60 手机版
解决时间 2021-11-20 23:03
- 提问者网友:夢醒日落
- 2021-11-20 11:39
c语言指针申请空间问题(简单)
最佳答案
- 五星知识达人网友:鱼忧
- 2021-11-20 12:50
这个你只要了解指针的用法你就明白了,指针是指向地址的一个数据类型 比如int b = 2; int *a = &b;那么a就指向b所在的地址。最通俗的就是a是门牌号b是房子,吧a挂在b上你就可以通过a找到b;并且如果不限制你,你也可以进入这个房子修改里面的东西。 回来说你上面的问题,如果换成
char *c;那么c就是个门牌号,如果不用malloc申请空间,就相当于只有门牌号没有房子,你通过c这个门牌号找到的房子不是你的,但是你还欺骗这些字符串说这里有房子,他们相信你了,他们进去了就和原来主人打架,然后就把房子拆了这就出错了。malloc相当于给你自己建房子,你就可以合法居住了。每个门牌号都要有一个属于自己的合法房子所以你说的移到下一个数据域时还要重新申请空间,是因为你的门牌号变了!!!!追问那int *p;p=&a;为什么可以不用malloc 我虽然知道这个比较不太好,但是大致意思就是什么时候该用malloc?还有链表里面,定义了*p,第一个malloc我已经有点不理解了,结果它p=q;之后p又一次malloc申请了空间。。。看不懂啊。为什么有的指针可以直接用 有的却要malloc?追答int *p=&a;p就可以不用malloc。a就好比是一个房子,p挂上牌子就被p占领了,所以p不用另外再造房子。 p=q;之后之所以还要申请空间是因为p指向的地址已经变了,所以另需分配。建议你去看一下指针的基础概念。
char *c;那么c就是个门牌号,如果不用malloc申请空间,就相当于只有门牌号没有房子,你通过c这个门牌号找到的房子不是你的,但是你还欺骗这些字符串说这里有房子,他们相信你了,他们进去了就和原来主人打架,然后就把房子拆了这就出错了。malloc相当于给你自己建房子,你就可以合法居住了。每个门牌号都要有一个属于自己的合法房子所以你说的移到下一个数据域时还要重新申请空间,是因为你的门牌号变了!!!!追问那int *p;p=&a;为什么可以不用malloc 我虽然知道这个比较不太好,但是大致意思就是什么时候该用malloc?还有链表里面,定义了*p,第一个malloc我已经有点不理解了,结果它p=q;之后p又一次malloc申请了空间。。。看不懂啊。为什么有的指针可以直接用 有的却要malloc?追答int *p=&a;p就可以不用malloc。a就好比是一个房子,p挂上牌子就被p占领了,所以p不用另外再造房子。 p=q;之后之所以还要申请空间是因为p指向的地址已经变了,所以另需分配。建议你去看一下指针的基础概念。
全部回答
- 1楼网友:污到你湿
- 2021-11-20 15:16
为指针申请存取数据的内存啊追问那int *p;p=&a;为什么可以不用malloc 我虽然知道这个比较不太好,但是大致意思就是什么时候该用malloc?还有链表里面,定义了*p,第一个malloc我已经有点不理解了,结果它p=q;之后p又一次malloc申请了空间。。。看不懂啊。为什么有的指针可以直接用 有的却要malloc?
- 2楼网友:上分大魔王
- 2021-11-20 15:06
malloc申请内存空间是有风险的,如果内衣这么个连续的内存空间,那么申请内存空间就会报错,用数组最保险
在链表中,每个节点都必须重新申请内存空间,
在链表中,每个节点都必须重新申请内存空间,
- 3楼网友:忘川信使
- 2021-11-20 13:46
char c[80]; 操作系统执行时会给程序分配80Byte的连续栈内存空间,如果写成char *c 则只是一个指针而已,不会分配连续的空间以存放字符串的。
而char * a = "blabla";
这里的"blabla"位于呈程序的字符串常量区,程序被装入的时候就会分配地址。, char* a 也只是一个指针而已。
关键在于“分配地址空间”追问那int *p;p=&a;为什么可以不用malloc 我虽然知道这个比较不太好,但是大致意思就是什么时候该用malloc?还有链表里面,定义了*p,第一个malloc我已经有点不理解了,结果它p=q;之后p又一次malloc申请了空间。。。看不懂啊。为什么有的指针可以直接用 有的却要malloc?追答指好了位置的指针就是好指针,可以拿来用。没指对地方的指针拿来用就有问题。malloc可以去看看malloc详解,malloc/ free对比一下C++的new/ delete来理解。追问谢谢啊
而char * a = "blabla";
这里的"blabla"位于呈程序的字符串常量区,程序被装入的时候就会分配地址。, char* a 也只是一个指针而已。
关键在于“分配地址空间”追问那int *p;p=&a;为什么可以不用malloc 我虽然知道这个比较不太好,但是大致意思就是什么时候该用malloc?还有链表里面,定义了*p,第一个malloc我已经有点不理解了,结果它p=q;之后p又一次malloc申请了空间。。。看不懂啊。为什么有的指针可以直接用 有的却要malloc?追答指好了位置的指针就是好指针,可以拿来用。没指对地方的指针拿来用就有问题。malloc可以去看看malloc详解,malloc/ free对比一下C++的new/ delete来理解。追问谢谢啊
- 4楼网友:你可爱的野爹
- 2021-11-20 13:11
char c[80]; //你为c开设了80个字节的存储区来折腾
char *c; //你没有开设存储区,那么如何或者说在哪里去倒腾字符串呢?
char *a="I am"; //这里虽然自己没有开设空间,但是偷懒行为,是依赖系统的常数存储区
char a[]="I am"; //或者写char a[5]="I am";才是正常写法,是自己开设的存储区
不是自己开设的变量和存储区操作起来容易出系统错误。
int a; int *p; p=&a; //虽然你在赋值阶段没有直接为p开设存储区,但p=&a;实现了让p指向自己开设
//的a变量存储区来进行后续操作
链表中作为指针一定在使用前要确认指向自己程序开设的存储区,否则就要出错;移到下一个数据域时如果这个域你没有申请存储区那么可以认为是不存在的,所以需要用malloc开存储区追问谢谢啊
char *c; //你没有开设存储区,那么如何或者说在哪里去倒腾字符串呢?
char *a="I am"; //这里虽然自己没有开设空间,但是偷懒行为,是依赖系统的常数存储区
char a[]="I am"; //或者写char a[5]="I am";才是正常写法,是自己开设的存储区
不是自己开设的变量和存储区操作起来容易出系统错误。
int a; int *p; p=&a; //虽然你在赋值阶段没有直接为p开设存储区,但p=&a;实现了让p指向自己开设
//的a变量存储区来进行后续操作
链表中作为指针一定在使用前要确认指向自己程序开设的存储区,否则就要出错;移到下一个数据域时如果这个域你没有申请存储区那么可以认为是不存在的,所以需要用malloc开存储区追问谢谢啊
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯