注册 登录
编程论坛 C语言论坛

申请内存问题

持剑的战士 发布于 2020-02-09 12:16, 3354 次点击
我定义一个指针*p,并为p申请内存空间,然后定义另一个指针*q,并且q=p。为什么我没有为q申请内存空间,而q也能存储p的内存?
12 回复
#2
吹水佬2020-02-09 12:32
是指针指向的地方才要分配空间,不是指针自身的空间。
#3
forever742020-02-09 12:56
“长春路10号”和“动物园”
都表示东经xxx北纬xxx的那个院子,不是很正常么?
#4
叶纤2020-02-09 14:39
指针不是指向的是地址吗?给指针申请内存空间
程序代码:
  int main()
{
    int *p=0;
    int a=4;
    p=&a;
    int *q=0;   
    q=p;
    cout << *q;
}
是这样的?还是下面这样的?
程序代码:
  int main()
{ int *p=new int;
  *p=3;
  cout<<*p;
}  
哪种是申请内存空间操作
#5
叶纤2020-02-09 15:07
楼主回答一下啊
#6
持剑的战士2020-02-09 16:28
回复 5楼 叶纤
我学的是C语言,c++我还没学,我是用malloc来申请内存的。
#7
持剑的战士2020-02-09 16:29
回复 2楼 吹水佬
谢谢大佬,我懂了
#8
叶纤2020-02-09 17:33
回复 6楼 持剑的战士
malloc,free您能举个最简单的例子吗?用c语言举例就行了,我能看懂哒,小哥哥
#9
chxchxkkk2020-02-09 17:48
int *p;
p = (int *)malloc(p, sizeof(int));
free(p);
#10
叶纤2020-02-09 19:26
回复 9楼 chxchxkkk
程序代码:
#include<iostream>
#include<stdlib.h>
using std::cout;
int main()
{ int *p;
p = (int *)malloc(sizeof(int)*10000);
*p=3;
cout<<*p;
free(p);
}


malloc 里面加p我的编译器运行不了,把p删掉才可以运行
#11
chocobo20012020-02-11 22:42
楼主,您好。您需要理解指针的含义:所谓指针 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 的数据。
#12
持剑的战士2020-02-12 16:08
回复 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;
}
这个是为单链表的头结点分配了一个内存并判断是否分配成功的程序,您垂阅一下。

#13
持剑的战士2020-02-15 11:30
回复 11楼 chocobo2001
感谢指导!
1