重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
指针变量无非就是一个表示内存地址的长整数而已,当然可以比较。指向同一个数组时,两个指针的大小就表示谁指向的元素靠前或靠后。如果不是指向同一个数组,比较大小就只能看出谁指向的内存空间地址较小,没什么意义。
创新互联建站是专业的孝感网站建设公司,孝感接单;提供网站制作、成都网站制作,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行孝感网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
对变量a的访问有两种方式:
一是直接按地址0x065FDF4H找到a的存储单元,从而对变量a进行访问;
二是按系统为p=a分配的地址先找到p=a,然后根据p,a的值(即变量a地址0x065FDF4H)找到变量a在内存中的存储单元,从而对变量a进行访问。对于前一种访问方式称为直接访问方式,后一种访问方式称为间接访问方式。
扩展资料
访问变量,首先应找到其在内存的地址,或者说,一个地址唯一指向一个内存变量,如果将变量的地址保存在内存的特定区域,用变量来存放这些地址,这样的变量就是指针变量,通过指针对所指向变量的访问,也就是一种对变量的“间接访问”。
设一组指针变量pa、pb、px、py、pm、pch1、pch2,分别指向上述的变量a、b、x、y、m、ch1、ch2,指针变量也同样被存放在内存,尽管所指向的变量类型不同,但是这些指针变量所占内存空间都是2个字节,而与所指向变量的类型无关。
C语言无法输出指针所指向的空间的大小!
一般,我们获取一个变量所占内存空间的方法为:sizeof(变量名或类型名),如:
int a;
int aa[10];
int *p=aa;
printf("sizeof(int)=%d\n", sizeof(int) ); //现在的机器一般为32位或64位机,int类型占四个字节,所以输出4
printf("sizeof( a )=%d\n", sizeof(a) ); //输出4
printf("sizeof( aa )=%d\n", sizeof(aa) ); //输出4*10=40
printf("sizeof(p)=%d\n", sizeof(p) );//输出4 ?见下面说明
printf("sizeof(int *)=%d\n", sizeof(int *) );//输出4 ?见下面说明
指针变量定义:用来存储内存地址的变量。指针变量中存储的是内存地址数据(一个整型数),而不是真正的数据,真正的数据是在地址中存放的。所以,指针变量实际上就是个整型变量,用sizeof命令去获取任意类型的指针变量都会得到4。
指针变量存储的是一个存储空间的首地址,究竟这个空间有多大,可以存储多少个数据,这是分配空间时所决定的。单独看一个地址值,是看不出其空间大小的。如:
int a;
int aa[10];
int *p ; //定义一个指针变量
p=aa ; //指向数组aa,aa的数据空间是40字节,10个整数
p=a; //指向一个整型变量,它的存储空间是4字节,一个整数
void exchange(int *p1,int *p2,int *p3)
{
void ex(int *p11,int *p22);
if(*p1*p2) ex(*p1,*p2);//ex(p1,p2);传递指针
if(*p1*p3) ex(*p1,*p3);// ex(p1,p3);
if(*p2*p3) ex(*p2,*p3);// ex(p2,p3);
}
指针即为地址,指针几个字节跟语言无关,而是跟系统的寻址能力有关。
比如:以前是16为地址,指针即为2个字节;现在是32位系统,则就为4个字节,64位32位系统,则就为8个字节。
扩展资料:
使用指针来读取数据,在重复性操作的状况下,可以明显改善程序性能,例如在遍历字符串,查取表格,控制表格及树状结构上。对指针进行复制,之后再解引用指针以取出数据,无论在时间或空间上,都比直接复制及访问数据本身来的经济快速。
指针的机制比较简单,其功能可以被集中重新实现成更抽象化的引用(reference)数据形别。许多编程语言中都支持某种形式的指针,最著名的是C语言,但是有些编程语言对指针的运用采取比较严格的限制,如Java一般避免用指针,改为使用引用。
有两种含义,一是作为数据类型,二是作为实体。
指针作为实体,是一个用来保存一个内存地址的计算机语言中的变量。指针一般出现在比较底层的程序设计语言中,如C语言。高层的语言如Java一般避免用指针,而是引用。
指针作为数据类型,可以从一个函数类型、一个对象类型或者一个不完备类型中导出。从中导出的数据类型称之为被引用类型(referenced type)。指针类型描述了一种对象,其值为对被引用类型的实体的引用。
参考资料:百度百科 指针
对于这个你只要记住一句秘诀就好,指针的大小仅仅取决指针本身的大小,不取决于指针指向的大小。 还有就是还有一个虚拟内存和物理地址的关系,有MMU映射,8086里有硬件完成一个地址偏移的过程,物理地址 = 基址*16 + 变址。
int huandizhi(int *a,int *b)
{
int *temp;
temp=a;
a=b;
b=temp;
}
出在这个函数里面
交换的是a和b的值。 这个是交换形参本身的值,无法带回主函数。
要影响实参,那么只能交换*a和*b的值。