對酒當歌,人生幾何? 譬如朝露,去日苦多

1.计算机内存划分

首先把计算机看成一个学生公寓楼,每个房间就是一个内存单元,每个房间号就是存储单元的地址(计算机中地址编码的最基本单位是字节(每个字节由8个二进制位组成))。

2.普通变量与指针变量的区分(其实指针类型的存放的是指针,另外就是指针还能指向另一个地方)

int a;
int *a;

这样几乎没有什么不一样,房间名字都是a,但是一个存放int型变量

一个存放地址。

如果p存放了一个地址,那么*p就指向存放这个地址的房间

#include<stdio.h>
int main()
{
    int *p;//声明p是一个int型的指针
    int a=10;
    p=&a;
    printf("%d\n",*p);//输出指针p所指向的内容
    return 0;
}

还用一种错误用法(我感觉是错的,不然指针意义何在?)

#include<stdio.h>
int main()
{
    int *p;
    scanf("%d",&p);//&p取p的地址,然后把一个数放进去
    //说好的只能存地址呢?
    //还能这样用,也是醉了
    printf("%d\n",p);
    return 0;
}

 

3.定义指针空间和new一个空间的区别

int *p[10];

int *p;
p=new int[10];

 

定义一个指针的空间,是开了几个房间只能存储指针型

而new一个空间则是相当于开了一个数组(不知道内部怎么实现的)

区分办法

这样可以运行

#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    int *p;
    p=new int[10];
    p[0]=1;
    printf("%d\n",p[0]);
    return 0;
}

 

这样不可以运行

#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    int *p[10];
    //p=new int[10];
    p[0]=1;
    printf("%d\n",p[0]);
    return 0;
}

 

错误错误用法,跟2的错误用法差不多

#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    int *a[10];
    for(int i=0;i<3;i++)
    {
        scanf("%d",&a[i]);//取出a[i]的地址,然后向里面放东西
        //没有了指针的意义
    }
    for(int i=0;i<3;i++)
        printf("%d ",a[i]);
    return 0;
}

 

标签: none

添加新评论