• C语言 指针小结


    指针

    
    ——>指针变量
    类型名 *变量名
    int *point1; char *point2;
    
    注意:*p可以直接使用,它代表指针p指向的变量,*p可以当做被指向的变量使用!~~~~
    
    一个变量的地址 成为这个变量的指针。
    
    ——>数组元素的指针
    定义:数组元素的地址
    定义数组
    
    一维数组 int p[10] = {1,2,3,4};
    二维数组 char k[][3] = {
    {'a','b','c'},
    {'k','c','s'’},
    {'j','w','z'}
    };
     
    
    1 数组元素的指针
    int *s = &p[0];//指针变量s,指向数组p的0号元素,作用将p数组的首元素的地址赋值给指针变量s(不是*s哦)。
    int *s = p;//意义同上 ,指向数组的0号元素
    2 在引用数组元素时 指针的运算?? 指针也能运算。。
    定义说明:如果指针变量指向数组中的一个元素,则p+1指向通数组中下一个元素,p-1指向通数组中的上个元素。
    例如 int *s = p;//即为s指向p的0号元素p[0],p++则指向p[1]; 
    3 引用数组方法
    int a[10] = {1,2,3,4};
    int *p = a;
    >1 下标法 a[i]
    >2 指针法 *(a+i)或*(p+i)    //a数组名称,p指向数组元素的指针变量。
    
    4 指针引用多维数组
    多维数组 int a[3][4] = {{1,2,3,4},{5,6,7,8},{7,8,3,6}};
    c语言规定数组名代表数组首元素的地址。
    ps:so数组名“a”代表数组多维数组a首元素的地址,即为“1”== &a[0][0]的地址、
    a[0]+1 =*(a+0)+1=&a[0][1];a[1]+1 =&a[1][1];
    
    ——>字符串 字符指针
    
    1 定义字符串
    
    char string[] = “i love you”;//通过数组定义字符串
    char *string = “i love you”; //通过指针变量定义字符串
    
    ps:C语言中只有字符变量 没有字符串变量,
    所以“字符指针变量string”指向的是第一个元素的地址即为i的地址,绝对不是整个字符串的地址。
    只能说把i love you 的第一个字符额地址付给指针变量string
    
    2 字符串输出
    字符串输出原理、printf原理
    printf 输出字符 s% 输出过程:给出变量名称string,则系统输出string指向的字符串第一个字符,然后自动使string加1,使之指向下一个字符,在输出该字符.....如此知道遇到字符串结束标志’0’为止。
    
    3 表示字符串元素
    char a[] = “i am a student”;
    a[i] == *(a+i) a[0] = *(a+0) = i //前者下标法,后者地址法
    表示数组元素的方法!~
    
    4 字符数组 指针 内存表示
    字符数组:若干字符元素组成。
    字符指针:指向字符串第一个元素(字符)的地址。
    内存分析:编译时 为字符数组分配若干存储单元,以存放各个元素,
    编译时 为字符指针分配一个存储单元(visual c++ 指针变量分配4个字节)
    
    
    ——>指向函数的指针
    
    1函数指针定义:定义函数 编译时 系统为函数分配存储空间,这段存储空间的起始地址(入口地址)成为函数的指针。
    例如
    int (*p)(int ,int)//形式为: 类型名(*指针变量名)(函数参数表列)
    定义指向函数的指针变量p,指向的函数返回值为整型且有两个整型的参数,(*p)表示指针变量P
    p的类型用int(*)(int,int)表示
    
    
    int test2 (int, int);
    int (*p) (int, int); //定义函数指针
    p = test2; //p指向test2函数,将test2的入口地址赋值给指针变量p
    int c = (*p)(20,30); //通过指针变量调用test函数 
    
    NSLog(@"%d",c); //打印
    —————————————————————————————————————————————————————
    int (*p) (int, int);//定义函数指针
    p = test2(20, 30);//错误写法!!!!这尼玛 是将函数值赋值给指针变量P。
    printf(“%d”,p);//打印
    
    指针函数p+n p++ p—-等运算时无意义的...
    
    2 指向函数的指针作为函数参数
    
    复制代码
    例题:当k分别为1、23 则求a+b的不同计算结果
    void main()
    {
    int max(int a,int b);
    int min(int a,int b);
    int add(int a,int b);
    int x ,y,k;
    x = 20;
    y = 10;
    k = 3;
    NSLog(@"--->%d",k);
    
    if (k ==1) {
    int c = fun(x,y,max);
    printf("===>%d",c);
    }else if(k == 2){
    int c = fun(x,y,min);
    printf("===>%d",c);
    }else if(k == 3){
    int c = fun(x,y,add);
    printf("===>%d",c);
    }
    //参数为 函数指针
    int fun(int sum1,int sum2,int (*p)(int a ,int b))
    {
    return (*p)(sum1,sum2);
    }
    //求最大值
    int max(int a,int b)
    {
    
    return MAX(a, b);
    }
    //求最小值
    int min(int a,int b)
    {
    return MIN(a, b);
    }
    //求和
    int add(int a,int b)
    {
    return a+b;
    }
    复制代码
     
    
    3 返回指针值得函数
    int *p(int a,int b);//定义函数:函数名为p,返回值为“int *”的指针,形参为两个int型的函数p
    定义返回指针的函数:基本形式:类型名* 函数名(参数表列)
    对比int (*p)(int a,int b);这里是定义一个指针函数
    
    
    —>指针数组
    定义:数组中所有元素都为指针
    类型名 *数组名[数组长度];
    int *p[10]; 意味:数组中元素为int*类型,指向整型变量的指针
    char *name[] = {“Follow me”,”Basic”,”Great Wall”,”Computer design”};
    //定义指针数组,分别指向四个字符串
    
     
    
    指针小结:
    区别指针 指针变量。
    指针就是个地址;指针变量是一个存放地址的变量
    指向: 谁把地址存放到指针变量中,就说指针变量指向谁。
  • 相关阅读:
    Java中static、final、static final的区别(转)
    Google的JSON风格指南
    Google代码风格指南
    Java中的final关键字(转)
    Java的不定参数(eg:Object...)(转)
    Java Enum枚举的用法(转)
    Java中包装类型和基本类型的使用场景(什么时候使用包装类型)(转)
    Java常用的集合类(转)
    使用Swagger生成Spring Boot REST客户端(支持Feign)(待实践)
    Java搜索引擎选择: Elasticsearch与Solr(转)
  • 原文地址:https://www.cnblogs.com/ly1973/p/5952915.html
Copyright © 2020-2023  润新知