| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2921 人关注过本帖
标题:申请内存问题
只看楼主 加入收藏
chocobo2001
Rank: 1
等 级:新手上路
帖 子:21
专家分:5
注 册:2015-10-7
收藏
得分:0 
楼主,您好。您需要理解指针的含义:所谓指针 p ,是一个变量,和普通的变量 int a,b,c,d...一样,里面具体的数值都是二进制值,如 01001011,只不过恰好 p 中储存的值是另外一组数据的首地址,而 a,b,c,d 中的值是普通数据,当然事实上 a,b,c,d 也能储存一组数据的地址,只不过在对地址读数据时需要先把 a,b,c,d 强制成某种类型的指针,如:(int*)a, (char*)b, (double*)c, (float*)d,之后在取数据时再调用取值操作 *,如:*(int*)a, *(char*)b, *(double*)c, *(float*)d,这样和 *p 一样就可以把某地址的值读出来了,这样做的原因是符合语言的严整性,保证各个变量逻辑上的规则性,不然编译器无法理解,比如 *a,这样做对 a 中的地址是取出 4 个字节的值,还是 1 个、8个字节的值,这就不明确了,所以需要对变量做强制类型转换。回到楼主的问题,p 和 q 与上面讨论的本质是一样的,经过 q = p 的赋值后,这两个变量中储存的二进制值是一样的,比如都是 01101010,换成十进制是 106,也就是说 p 和 q 中的值都是 106,对 p 和 q 同时做取值或赋值操作 *p 与 *q ,都是对值为 106 的这个地址做取值或赋值操作,因此看上去好像 q 也能存储 p 的数据。
2020-02-11 22:42
持剑的战士
Rank: 1
等 级:新手上路
帖 子:30
专家分:3
注 册:2019-12-6
收藏
得分:0 
回复 10楼 叶纤
抱歉,前几天没上线
#include<stdio.h>
#include<strings.h>
struct node
{
    int data;
    struct node *pNext;
};
int main()
{
    struct node *head;
    head = (struct node *)malloc(sizeof(struct node));
    if(NULL == head)
    {
        printf("malloc error!\n");
        exit(0);
    }
    return 0;
}
这个是为单链表的头结点分配了一个内存并判断是否分配成功的程序,您垂阅一下。

2020-02-12 16:08
持剑的战士
Rank: 1
等 级:新手上路
帖 子:30
专家分:3
注 册:2019-12-6
收藏
得分:0 
回复 11楼 chocobo2001
感谢指导!
2020-02-15 11:30
快速回复:申请内存问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024610 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved