ASP源码.NET源码PHP源码JSP源码JAVA源码DELPHI源码PB源码VC源码VB源码Android源码

20160206CCPP体系详解0016天(1/2)

来源:网络整理     时间:2016-02-18     关键词:

本篇文章主要介绍了"20160206CCPP体系详解0016天",主要涉及到方面的内容,对于其他编程jrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播感兴趣的同学可以参考一下: 代码片段(01):.指针.c+02.间接赋值.c 内容概要:内存///01.指针#include #include

代码片段(01):.指针.c+02.间接赋值.c
内容概要:内存

///01.指针#include #include //01.取地址操作符(&)详解://  1.操作对象:变量名(实质:内存实体|数据实体)//  2.操作特点:属于寄存器操作(操作结果不是内存实体)//      (1).取地址操作(&变量名)是在CPU的寄存器区域所完成的操作;//      (2).地址数据不占用内存,内存地址是在CPU核心构成组件寄存器产生的,//          内存地址的数值和内存存储没有实质关系;//  3.计算机地址总线:连接CPU与硬件内存的总线//      (1).总线数目与CPU位数+操作系统位数有关//      (2).地址数值作为一个常量恒久不变//      (3).地址作为产量恒值并不会占用内存//          内存地址是在CPU的寄存器当中产生的,因此不具备内存实体,也就不会占用内存//      (4).总线的个数决定者位数的不同://          32条总线对应于32位操作系统;64条总线对应于64位操作系统//02.对指针变量的解释://  P一个指针变量,用于存储普通变量的地址数值,然后通过操作指针变量的方式间接操作普通变量//03.对于指针所占用的字节数分析://  Win32平台所编译的程序的指针类型占用4个字节//  Win64平台所编译的程序的指针类型占用8个字节int main01(void)
{
    int num = 10;
    int data = 20;
    //P是一个指针变量,可以存储相同类型的不同变量的内存地址,常用于做间接访问变量本身(内存实体)操作int * pNum = #//0x12312312int * pData = &data;
    printf("%d \n", sizeof(pNum));//指针变量所占用的内存尺寸为4个字节(Win3平台所编译的程序)printf("%p \n", pNum);//直接打印指针变量(pNum)的数值,相当于间接打印了普通变量(num)的地址printf("%p \n", &pNum);//表示获取"指针"变量的地址,类型为int **    system("pause");
}

//04.指针变量内容详解://  1.类型://      既决定了内存实体步长,也决定了内存实体解析方式//  2.数值://      就是一个地址数值//  3.场景:(携带*号的情况)//      赋值号左边://          给内存实体写入数据//      赋值号右边://          从内存实体读取数据int main02(void)
{
    int num1 = 1100;
    int num2 = 1200;//变量num都分配了内存,内存实体(数据实体)的数值代表变量的数据int * pNum = &num1;//pNum1是int类型的一级指针变量,&num1是一级指针真常量数值(含有类型含义)
    pNum = &num2;//pNum的值是num2这个变量(内存实体|数据实体)的内存地址,该内存地址统一占用4个字节,int * 地址,指针变量的长度统一为4//int * 对称于pNum,指针类型既决定了内存实体的访问字节步长,也决定了内存实体的解析方式,特殊点:浮点型数据的特殊存储形式,既是指数形式存储还涉及到无符号类型(存储实质阶码)
    *pNum = 12;//通过指针变量间接的访问了普通变量的内存实体//根据指针数值找到内存地址,根据指针类型既决定了存储步长也决定了存储方式printf("%p \n", &pNum);//&pNum表示获取一级指针变量pNum的内存地址,该地址数值存储于CPU核心组件寄存器区域,完全不会占用内存存储printf("%d \n", num2);
    printf("num2 = %d \n", num2);

    system("pause");
}

//05.野指针:就是没有进行初始化操作的指针变量//  VC:编译检测,GCC编译不检测//06.解析方式的不同含义://  有无符号:signed/unsigned//  存储原理:补码原理/阶码原理//07.指针变量所占用的内存尺寸只跟编译平台有关://  Win32平台:4字节-->Win64平台:8字节int main03(void)
{
    //int * p;//没有对象的野指针,定义指针变量的时候必须进行指针变量的初始化操作//printf("%p \n", p);//打印指针变量当中所存储的内存地址-->编译不通过//解析方式的不同特点://  signed/unsigned(只针对于10进制的整数)+float指数形式存储(阶码实质存储)int num1 = 10;
    int num2 = 20;
    //float * pNum;//pNum = &num1;//printf("%f", *pNum);//指针变量的类型决定了指针变量对其所存储的地址数值的解析步长(字节尺寸)以及解析方式(补码阶码)int * pNum;
    pNum = &num1;
    printf("%d \n", *pNum);//对内存地址数值的正确解析步长和正确解析方式printf("%d \n", sizeof(pNum));//指针变量所占用的字节长度在Win32平台之下统一占用4个字节的内存尺寸,任何类型的地址都一样采用int类型的统一字节尺寸存储printf("%d \n", sizeof(*pNum));//尺寸,方式    system("pause");
}

//08.指针认识规律://  *pNum<=>numint main04(void)
{
    int num = 20;
    int data = 30;
    int * pNum = #//int类型的一级指针变量存储了int类型的普通变量的内存地址//&num = 1;//内存地址不允许操作,由于&num这个表达式是在CPU的寄存器当中所进行的操作,然而C语言是不能够直接修改寄存器当中的数据的//pNum = &data;
    num = 3;
    printf("%d,%d \n", *pNum, num);//*pNum和num是完全等价的
    *pNum = 7;
    printf("%d,%d \n", *pNum, num);

    system("pause");
}
///02.间接赋值.c#include #include //01.函数形参具有副本机制://  1.传值和传指的数据层面意思都一样;//      只不过对同样的数值有着不同的解析方式!//  1.函数的副本机制总是存在;//      无论是传值还是传地!void change05(int num)//函数形参具有副本机制
{
    //函数形参具有副本机制,因此,无论是传值还是传指,都具备这样的特性://  传值传递的是副本,传指传递的是地址,因此出现不一样的修改效果//  实质:都是副本,只不过对待同样的数值解析方式不同而已
    num = 3;
    printf("change05 = %d \n", num);
}

int main05(void)
{
    int num = 10;
    change05(num);
    printf("%d \n", num);

    system("pause");
}

void change06(int * pNum)
{
    *pNum = 3;
}

int main07(void)
{
    int num = 10;
    change06(&num);//&num-->表达式-->没有内存实体-->位于寄存器-->C语言不具备修改寄存器的权限printf("%d \n", num);

    system("pause");
}

程序片段(02):01.Run.c
内容概要:挂

相关图片

相关文章