黑马程序员技术交流社区

标题: 指针的学习与探讨 [打印本页]

作者: jeffdy66    时间: 2015-11-10 00:15
标题: 指针的学习与探讨
指针:是一个能存地址的数据类型
定义:类型 * 指针名
赋值:    指针变量名=指针(地址)注意:指针获取方法(&变量名)

何时用:当需要存储地址,便于操作该地址及地址对应的内存数据的时候.
特点:
指针本身也是地址,指针定义之后,自身地址不变,但里面的存的地址可以变化.
&p表示指针自身地址,而p表示指针存的地址.*p表示指针所存地址的内存空间.

int *p2;  int *p3[3];  这里的*p3[3]是什么意思?
答: 所表示的是一个由三个指向int型变量的指针变量所组成的数组,数组里面的每一个元素存储的都是指针






1.指针里存的实际是什么?
答:地址

2. 指针本身有地址吗?
答: 指针变量也是变量,变量就有地址.

3. 指针占几个字节?
答: 由操作系统决定,如是32位,占字节数为4,64位占8个字节.

4. 如何取指针里的数据?
答: *p

5.一个类型的指针可以存不同类型的地址吗?
答:不可以

编程题: 实现一个函数能够实现两个整数的加减乘除运算





#include <stdio.h>
int add(int a,int b,int *p4,int *p5,int *p6);
int main(){
   
//  定义变量
   
    int a=6;   
    int b=8;
    int c4,c5,c6;
    int *p4=&c4;
    int *p5=&c5;
    int *p6=&c6;
    int c3=add(a,b,p4,p5,p6);
   
    printf ("a+b=%d,a-b=%d,a*b=%d,a/b=%d\n",c3,c4,c5,c6);
}

int add(int a,int b,int *p4,int *p5,int *p6){
   
    // 函数调用
    *p4=a-b;
    *p5=a*b;
    *p6=a/b;
    return a+b;
}



int a=100 ,b=200;
    int *p=&a;
    int *q=&b;
    printf("a=%d,*p=%d\n",a,*p);
    printf("b=%d,*q=%d\n",b,*q);
   
    // 不可利用*p间接改变a变量值   *p=b ;这里是错的


    p=&b; // 但可以将p指针指向另一变量的地址
    printf("*p=%d\n",*p);
   
    // q=&a; 不可更改q指针指向另一变量的地址

    *q=888; // 可以利用q指针间接更改b的变量值.
   
    printf("*q=%d\n",*q);






     int a=100;
    int *p1=&a;
    int **p2=&p1; //
   
    printf("变量定义如下:\n");
   
    printf("int a=100:\n,int *p1=&a:\n,**p2=&p1:\n\n");
   
    printf("&a=%p\n",&a); // 0x7fff5bd5ac08
   
    printf("&p1=%p,p1=%p\n",&p1,p1); //0x7fff5bd5ac00     ,p1=0x7f5ac08
    printf("&p2=%p,p2=%p\n\n",&p2,p2);//
0x7ff5bd5abf8,p2=0x7fff5bd5ac00
   
    printf("**p2=%d,*p1=%d\n",**p2,*p1); // 100, 100


作者: arhui    时间: 2015-11-10 09:01
研究的很深入嘛
作者: 陆露    时间: 2015-11-10 10:19
一旦你看透他是怎么回事 他真的不难。 他的好处就是地址传递 只每种数据类型的指针,表达式不同而已。
作者: 许本亮    时间: 2015-11-10 11:23
学习了,顶一下
作者: 于鸿鹏    时间: 2015-11-10 14:20
学习了感谢总结
作者: jeffdy66    时间: 2015-11-10 21:34
arhui 发表于 2015-11-10 09:01
研究的很深入嘛

哈哈,大家相互学习和探讨,才能进步
作者: jeffdy66    时间: 2015-11-10 21:37
陆露 发表于 2015-11-10 10:19
一旦你看透他是怎么回事 他真的不难。 他的好处就是地址传递 只每种数据类型的指针,表达式不同而已。 ...

that's right  看来又是个大神呀.哈哈 希望相互交流呀
作者: jeffdy66    时间: 2015-11-10 21:40
陆露 发表于 2015-11-10 10:19
一旦你看透他是怎么回事 他真的不难。 他的好处就是地址传递 只每种数据类型的指针,表达式不同而已。 ...

  看来又是个大神呀.哈哈 希望相互交流呀,谢谢
作者: jeffdy66    时间: 2015-11-10 21:41
陆露 发表于 2015-11-10 10:19
一旦你看透他是怎么回事 他真的不难。 他的好处就是地址传递 只每种数据类型的指针,表达式不同而已。 ...

分析的很对呀, 指针就是地址传递,受教了.thank u
作者: hei军    时间: 2015-11-11 19:38
看的有点晕乎
作者: 能不能行    时间: 2015-11-11 20:51
感谢分享!!
作者: 小贼船    时间: 2015-11-13 23:06
先看两眼,还没学到
作者: 韦德460    时间: 2015-11-14 10:18
回来看一下对不对
作者: Meracle    时间: 2015-11-14 17:50
谢谢分享 学习了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2