c语言学习之基础知识点介绍(十):内存空间模型、地址解释及指针变量

一、内存

/*
 
 内存:
          存在内存里的。
 
 内存分了N多个小空间,每个小空间1个字节
 
 每个小空间有它自己的地址。每个地址之间差1
 
 int类型占用4个字节,等于占了4个空间(有4个地址),不需要记住4个地址,而记住首地址就行了(因为首地址相当于入口或者生活中的门)
 
 指针:
 
    指针就是地址,地址就是指针。
 
    地址:内存的地址
 
 
 内存中的地址:
        其实也是从1开始编号,然后一直自增
        1M内存,1024个地址
 
 0x7fff5fbff7cc:这叫16进制
 
 十进制:逢10进1        有:0  1  2  3  4  5  6  7  8  9
                       逢十进1
                                9   10
 
 十六进制:就是逢16进1
 
                      有:0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
 
 以0x开头  
        简单说1-10
                0x1   0x2  0x3  0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf
            16:0x10

 0x35:53
 
 0xa0:160
 
 顺带说下:
    二进制:0和1
            0   1  10

    八进制:0 1 2 3 4 5 6 7 
           
*/

 二、指针变量

/*
指针变量:存放地址的变量。
        语法:类型  *指针变量名;
        赋值:指针变量名  = 地址;     
在声明的时候初始化:类型  *指针变量名 = 地址;       
例如:
int num = 20;
int *nump = #//存的是num的地址
打印指针变量:
         printf("%p \n %p \n",nump,&num);
注意:定义指针变量,有如下几种方式:
            1、类型  *  变量名 ;
            2、类型*  变量名 ;
            3、类型  *变量名 ;
以上三种都可以,*  代表一个特殊类型。
类型*  构成了类型
*/

上面介绍了怎么去定义一个指针变量,下面介绍怎么使用它。

/*
 
 使用指针变量
 
        语法:
                *指针变量名;
 
        语义:这就可以访问你所指向的那块空间里的值了
 
 
 千万要注意:
    访问指针变量时加星号和不加星号的区别:
            int num;
            int *p = #
 
            1.加星号代表,是访问它所指向的空间里面的值。*p 相当于  num;
 
            2.不加星号代表,是访问它自己的空间里面的值。p 就是自己里面存的值

*/
//例如:

    int num = 10;
    
    int *pNum;
    
    pNum = # //注意:&不要省略!
    
    printf("%d   %d\n",num,*pNum);//所以也就是说,*pNum == num;

    *pNum = 30;
    
    printf("num=%d\n",num);//30


    
    num =  90;
    
    printf("*pNum=%d\n",*pNum);
    
    int num = 10;
    
    int *pNum = #
    
    (*pNum)++;  //相当于num++ num=11
    
    num += 20;
    
    printf("num=%d\n",num);//31


    
    int num = 10;
    
    int *pNum = #
    
    int *pNum2 = pNum;
    
    *pNum2 = 30;
    
    printf("num=%d  *pNum=%d     

    *pNum2=%d\n",num,*pNum,*pNum2);//30 30 30
    

一定要注意在使用指针变量的时候,加星号(*)和不加星号(*)的区别;同时指针变量也区别类型(区分类型是为了告诉指针,该去读取几个字节)。

什么类型的变量就用什么类型的指针去读取。

下面看一个例子:

 

int num1 = 10,num2 = 20;
int *p1 = &num1;
int *p2 = &num2;
int *p3 =  p2;
*p2 = 40 ;
p2 = p1;
*p2 = 30;

printf("num1 = %d   num2 = %d   *p1= %d   *p2= %d   *p3= %d ",num1,num2.*p1,*p2,*p3);
/*
有兴趣的可以自己算下。
*/

 指针变量作为函数的参数:

/*
语法:
返回值类型 函数名(指针类型*  指针变量名){
     
}

例如:
void test1(int*  num){
    
}

int main(int argc,const char argv[]){
     int num = 10;
     test1(&num);
}
*/

 

posted @ 2015-11-02 12:02  祁临芯  阅读(528)  评论(0编辑  收藏  举报
友情链接:初心商城