• 指针,指针,指针。。。


    1、指针常量与常量指针

    int a = 10;
    int * const p1 = &a;
    const int * p2 = &a;

    p1是不可改变地址的常量,即指针常量,但能够对它所指向的内容进行改动。

    p2是指向常量的指针。即常量指针,它所指向的地址内容是不可改动的,但其本身确实能够改动的。

    2、指针运算

    #include<stdio.h>
    int main()
    {
    	int *ip1,*ip2,ivalue;
    	char *cp1,*cp2,cvalue;
    	ip1 = (int*)0x500;
    	ip2 = (int*)0x518;
    	ivalue = ip2 - ip1;
    	cp1 = (char*)0x500;
    	cp2 = (char*)0x518;
    	cvalue = cp2 - cp1;
    	printf ("ivalue=%d  cvalue=%d
    ",ivalue,cvalue);
    	return 0;
    }
    执行结果:ivalue=6  cvalue=24

    指针进行运算时,它的值与其类型有关。

    两个地址相同相差24个字节,以整形指针相减结果为 24/4=6。以字符指针相减结果为 24/1=24;

    3、指针与数组

    #include<stdio.h>
    int main()
    {
    	int a[2][3][4] = {
    		{{101,102,103,104},{111,112,113,114},{121,122,123,124}},
    		{{201,202,203,204},{211,212,213,214},{221,222,223,224}}
    	};
    	printf("%d	%d
    ",**(a[0]+2),sizeof(a));
    	return 0;
    }
    输出结果:12196

    分析:对于一位数组a。*a等价于a[0]。*(a+2)等价于a[2]。同理对于多维数组*a[0]等价于a[0][0],*(a[0]+2)等价于a[0][2]。**(a[0]+2)等价于*a[0][2]等价于a[0][2][0]。


    sizeof(a)计算数组a所占内存空间:(2*3*4)*4Byte=96Byte。

    4、指针数组 与 数组指针

    int *p[N],p代表一个可存放N个整型指针类型元素的一维数组,p是指针数组。本质是数组,是常量。

    int (*p)[N],p代表一个指向由N个整型数据组成的一维数组的指针。p是数组指针,本质是指针,是变量。

    5、指针函数 与 函数指针

    int * f(int x),f代表一个返回值为整型指针的函数。f是指针函数。本质是函数。

    int (*f)(int x),f代表一个指向函数的指针,该函数的參数和返回值均为整型,f是函数指针,本质是指针。





  • 相关阅读:
    如何选择合适的MySQL存储引擎
    如何提高Windows操作系统内存利用效率
    jQuery插件 面包屑导航
    [Fireworks+Dreamweaver制作网站]第7课上
    一次完整的安全渗透测试
    jquery插件 跟随屏幕滚动的层
    [Fireworks+Dreamweaver制作网站]第1课
    [Fireworks+Dreamweaver制作网站]第2课
    随笔 幸福
    jQuery插件 jqueryflexselect下拉框自动提示
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/7247407.html
Copyright © 2020-2023  润新知