关于指针的学习

# include <stdio.h>
int main()
{
    int x = 3;
    int* p = &x;          /*星p即是x的指针,又定义了一个p   */
    printf("%p\n", &x);   /*00B3FD58      x的地址*/
    printf("%p\n", &p);   /*00B3FD4C      p的地址      */
    printf("%d\n", x);    /*3*/
    printf("%d\n", *p);   /*3   *p的值就是x   */
    printf("%d\n", &x);   /*11795800   这也是x的地址,只不过是用十进制     */


}

把int看作一个整体, 这样后面就是p=&x p是x的地址 p就是x的值

# include <stdio.h>
int huhuan(int* p, int* q);
int main()
{
    int a = 3;
    int b = 5;

    huhuan(&a, &b);         /*与下面的函数相对应,int*类型对应&a和&b*/
    printf("a=%d,b=%d\n", a, b);
    return 0;
}
int huhuan(int* p/*a的地址*/, int* q/*b的地址*/)     /*int*类型的要对应&a和&b*/
{
    int t;
    t = *p;        /*不要以为*p就是指针类型了      其实*p是int类型的        *p的值是p中地址所对应的变量值        */
    *p = *q;     /*很重要!!!!!!!!是此程序的关键!!!!!!*p指向a,所对应的存储空间就是a,*p完全就是a,所以在函数中终于找到了a和b*/
    *q = t;        /*这就做到了从函数中搞到了a和b*/
    return 0;
}

此程序用来互换两个数字,用到了函数
假定必须使用函数,那么用传统的方法就不行了,函数内的变量跟外面的没有关系,而且也没法返回两个值,所以必须用到指针

# include <stdio.h>
int f(int* parr, int length);
int main()
{
    int a[5] = { 1,3,5,6,8 };
    f(a, 5);
    return 0;
}
int f(int* parr, int length)     
{
    int i;
    for (i = 0; i < length; i++)
    {
        printf("%d ", *(parr + i));     /*parr中储存了a[0]的地址,所以parr+i代表了数组中其余元素的地址,因为数组中每一个元素的地址是连在一块的*/
                                        /*所以*p(parr+i)能输出数组中所有元素*/
    }
    return 0;
}

zzz

# include <stdio.h>
int main()
{
    int a[5];/*a是数组名,5是元素的个数,元素就是变量*/
    int b[5];
    /*a=b error a是常量不能变*/
    printf("%#x\n", &a[0]);
    printf("%#x\n", a);     /*一维数组名是个指针常量,不需要再用取地址符号了*/
    return 0;
}

输出结果是:
0x92fdf8
0x92fdf8
总结:一维数组名是个指针常量,它存放的是一维数组第一个元素的地址

zzz

# include <stdio.h>
int f(int* parr, int length);
int main()
{
    int a[5] = { 1,5,6,7,8 };
    printf("%d\n", a[3]);
    f(a, 5);
    printf("%d\n", a[3]);
    return 0;
}
int f(int* parr, int length)      /*为什么要这么麻烦要用指针,还是跟前面一样,在函数内如果不用指针,
                                  函数内定义的就算是和main函数里的一样,它们的值也一点关系都没有,所以要用到指针才能把函数内的值搞到外去*/
{
    parr[3] = 88;     /*等价于   *(parr+3)  */
    return 0;
}

要时刻记住a是一个指针变量,它表示&a[0]也就是a[0]的地址

上一篇:嵌入式学习DAY9 --- const修饰的指针 ,函数 ,函数的声明 ,指针作为参数传参 ,一维和二维数组的传参


下一篇:【强化学习】多臂*——E_greedy、UCB、Gradient Bandit 算法 代码实现