ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

关于指针的学习

2019-11-04 18:50:33  阅读:177  来源: 互联网

标签:return int 学习 地址 关于 printf 指针 parr


# 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]的地址

标签:return,int,学习,地址,关于,printf,指针,parr
来源: https://www.cnblogs.com/panghushalu/p/11793954.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有