C知识回顾(一)

本案例代码非原创 , 我只是按照学习的过程自己重敲一遍回顾学习!
1.指针介绍

#include <stdio.h>

#pragma mark - 获取最大值
int getMaxNum(int i,int j)
{
    return i > j ? i : j;
}

#pragma mark - 获取最小值指针地址
int *getMinNum(int i,int j)
{
    int result = i < j ? i : j;
    int *pResult = &result;
    return pResult;
}

#pragma mark - main函数
int main(int argc, const char * argv[]) {
    /**
     *  普通指针:
     
     */
    printf("普通指针:\n");
    printf("--------------------\n");
    int a = 4;
    // 指针赋值:
    int *pa = &a;
    printf("a=%d\n" , a);
    printf("&a=%p\n" , &a);
    printf("pa=%p\n" , pa);
    // 指针取值:
    printf("*pa=%d\n" , *pa);
    
    /**
     * 指针的指针 ppa->pa->a
     */
    printf("指针的指针 ppa->pa->a\n");
    printf("--------------------\n");
    
    int **ppa = &pa;
    
    // 获二级指针pa的地址&pa:
    printf("&pa = %p\n",&pa);
    // 获取二级指针pa的地址 , 一样是&pa的地址 . 因为ppa是一个二级指针 , 而&pa一样是该二级指针的地址!
    printf("ppa = %p\n",ppa);
    // 获取一级指针的地址 , 其实这里的一级指针的地址就是一个 int* 类型的指针对象 , 一级指针的地址恰好就是&a的地址值 , 也就是第一个案例中的地址值:
    printf("*ppa = %p\n",*ppa);
    // 获取二级指针指向的一级指针对象里保存的对象值 , 也就是a = 4 , **ppa是一个int类型的对象 , 那自然就是4 了~
    printf("**ppa = %d\n",**ppa);

    /**
     * 数组指针: ☆☆☆数组的地址就是数组元素首地址☆☆☆
     */
    
    printf("数组指针\n");
    printf("--------------------\n");
    char b[] = "hello";
    char *pb = b;
    printf("b = %p\n",b);
    printf("pb = %p\n",pb);
    
    printf("--------------------\n");
    // 1.查看每个元素的地址:
    for (int i = 0; i < 5; i++) {
        printf("&b[%d] = %p\n",i,&b[i]);
    }
    
    printf("--------------------\n");
    //2.用下标取值:
    for (int i = 0; i < 5; i++) {
        printf("b[%d] = %c\n",i,b[i]);
    }
    
    printf("--------------------\n");
    // 3.用指针取值:
    // 为什么这里可以用 (b+i) 取值 , 只因为数组在内存上是一段连续区域  ,你 + 1就是下一段内存 , 恰好就是给下一个数组元素的!
    for (int i = 0; i < 5; i++) {
        printf("*(b+%d) = %c\n",i,*(b+i));
    }
    
    /**
     * 函数指针
     */
    
    printf("函数指针\n");
    printf("--------------------\n");
    int (*p1)(int, int);
    p1 = getMaxNum;
    int  result = p1(3,5);
    printf("max = %d\n",result);
    
    /**
     * 返回指针的函数
     */
    printf("返回指针的函数\n");
    printf("--------------------\n");
    int *p2 = getMinNum(3, 5);
    printf("min = %d\n",*p2);

    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_33860528/article/details/87416474