查看: 2660|回复: 1

c语言指针集合

[复制链接]
  • TA的每日心情
    开心
    2013-12-17 13:39
  • 签到天数: 48 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2017-8-24 15:27:17 | 显示全部楼层 |阅读模式
    分享到:
    指针与一维数组

    一维数组访问数组元素的4种方法:
    1.下标法,用a来访问数组元素;
    2.指针法,(ptr+i)形式间接访问;
    3.数组名,用(a+i)形式访问数组;
    4.指针下标法,ptr形式访问数组元素;

    二维数组访问数组元素
    1.int *ptr;ptr=a[0];
    for(i=0;i<3;i++)
    for(j=0j<4;j++)
    scanf("%d",ptr++);
    ptr=a[0];
    for(j=0j<4;j++)
    scanf("%d",ptr++);
    printf("%d",*ptr++);

    指向二维数组指针变量的说明形式

    类型说明符(*指针变量名)[长度];
    int a[3][4]={{2.4.6.8},{10,12,14,16},18,20,22,24};
    int (ptr)[4];
    ptr=a;
    for(i=0;i<3;i++)
    for(j=0j<4;j++)
    printf("%4d",((ptr+i)+j));
    其中(a+i)+j是二维数组a的i行j列的首地址。其元素的值为((a+i)+j);

    指针与函数

    函数指针变量的的定义形式一般为:
    类型说明符 (*指针变量名)();
    int (*ptr)();
    int add(int a,int b);
    void result(int (*ptr)(),int a,int b);
    ptr=add;
    result(ptr,i,j);
    void result(int (*ptr)(),int a,int b)
    {int vlaue;
    valye=(*ptr)(a,b);
    printf("%d",value);
    }

    指针形函数返回指针值得函数称为指针形函数

    类型说明符 *函数名(形参表)
    {函数体
    }
    int *pfun(int x,int y)
    {
    }
    例 利用指针函数编写一个秋字符串的函数
    指针与字符串
    void main()
    {char *p,*str="how do you do";
    printf("%s",str);
    }

    字符指针作为函数参数
    void catstr(char *dest,char *src)
    {while(*dest)
    dest++;
    while(*dest++=*src++);
    }

    字符指针与字符数组的区别

    (1)字符指针本身是一个变量,它的值可以改变,而字符数组的数组名虽然代表该数组的首地址,但它是常量,它的值不能改变。
    (2)赋初值所代表的意义不同
    对于字符指针
    char *ptr="hello world";
    char *ptr,ptr="hello world";
    对字符数组进行初始化
    char str[]="hello world";不能写为char str[80];str="hello world";
    实际赋值时,只能对字符数组的各个元素逐个赋值

    定义数组时,编译系统为数组分配内存空间,有确定的地址值,而定义一个字符指针时,低所指的指针是不确定的。

    对于字符数组可以这样使用
    char str[80];
    scanf("%s",str);
    对于字符指针,应申请分配内存,取得确定地址
    char *str;
    str=(char *)malloc(80);
    scanf("%s",str);
    这个情况会使程序很不稳定
    char *str;
    scanf(“%s”,str);

    指针数组

    类型说明 *数组名[数组长度];char*str[4];指该指针数组包含4个指针。
    <#include
    void main()
    {
    char *ptr1[4]={"Cat","Mouse","Dog","Sugar"};
    int i,*ptr2[3],a[3]={1,2,3},b[3][2]={1,2,3,4,5,6};
    for(i=0;i<4;i++)
    printf("\n%s",ptr1);
    printf("\n");
    for(i=0;i<3;i++)
    ptr2=&a;
    for(i=0;i<3;i++)
    printf("%4d",*ptr2);
    printf("\n");
    for(i=0;i<3;i++)
    ptr2=b;
    for(i=0;i<3;i++)
    printf("%4d%4d\n",*ptr2,*ptr2+1);
    }>

    指向指针的指针

    类型说明符 **指针变量名;
    float **ptr;
    其含义是定义一个指针变量ptr,它指向另一个指针变量(该指针变量又指向一个实形的变量),由于指针运算符“*”是自右向左结合,所以上述定义相当于:
    float * *ptr;

    指针运算小结

    int i,j,a[10],b[5][9],*p,*q,(*pi)[9],*pa[5];
    char *ps;
    char pas[]={"abc","defghij,kn"};//字符常量的首地址分别赋给指针数组pas[0],pas[1],pas[2];
    p=&i;将一变量地址赋给指针变量p
    q=p;//p和q是指针变量,将p的值赋给q;
    q=null;//将null空指针赋给指针变量q;
    p=(int)malloc(5*sizeof(int));//分配10个字节的储存单元,并把首地址赋给P
    p=a;//将a的首地址赋给指针变量P;
    p=&a;//将一维数组a的第i个元素赋给指针变量P
    p=&b[j];//将二维数组b[j]的地址赋给变量P
    pi=b+i;//等价pi=&b,将pi指向二维数组b的第i行
    for(i=0;i<5;i++)
    pa=b;//分别将二维数组b的第i行的第0列元素赋给
    ps="hello";//将字符串常量赋给指针变量ps。

    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2017-10-18 20:34
  • 签到天数: 19 天

    连续签到: 4 天

    [LV.4]偶尔看看III

    发表于 2017-9-9 00:13:44 | 显示全部楼层
    楼主 说实话 真的蛮不错
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-3-29 06:01 , Processed in 0.126759 second(s), 19 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.