指针

 1 #include<stdio.h>
 2 //2020年11月23日20:58:58
 3 int main(void)
 4 {
 5    double * p;
 6    double x = 66.6;
 7    
 8    p = &x;//x占8个字节,1个字节是8位,1个字节1个地址,
 9           //p存放的是第一个字节的地址,而不是8个字节的地址
10    double arr[3]={1.1,2.2,3.3};
11    double * q;
12    
13    q=&arr[0];
14    printf("%p\n",q);
15    q=&arr[1];
16    printf("%p\n",q);
17    return 0;
18 }

其中%p是以十六进制输出;

 

可以看到 arr[0]和arr[1]地址相差8个字节(double类型)。

 


题2:

 1 #include<stdio.h>
 2 //2020年11月23日20:58:58
 3 void f(int *);
 4 int main(void)
 5 {
 6    int i=9;
 7    int * p =&i;//等价于int * p; p=&i;
 8    //现在想要修改p的值(不是i的值哦)
 9    //先打印一下p的值看一下
10    printf("%p\n",p);
11    f(p);//error,p也是一个变量,需要传递p的地址才能修改p的值
12    //f(p);
13    printf("%p\n",p);
14    return 0;
15 }
16 void f(int * q)
17 {
18     q=(int *)0xffffffff;
19 }

 

 可以看到p的值并未改变,因为p和q是两个变量,改变q的值不会影响p的值;

下面来传递地址试试看呢?

 1 #include<stdio.h>
 2 //2020年11月23日20:58:58
 3 void f(int **);
 4 int main(void)
 5 {
 6    int i=9;
 7    int * p =&i;//等价于int * p; p=&i;
 8    //现在想要修改p的值(不是i的值哦)
 9    //先打印一下p的值看一下
10    printf("%p\n",p);
11    //f(p);//error,p也是一个变量,需要传递p的地址才能修改p的值
12    f(&p);
13    printf("%p\n",p);
14    return 0;
15 }
16 void f(int ** q)
17 {
18     *q=(int *)0xffffffff;
19 }

 

 OK搞定

 

posted @ 2020-11-23 21:03  Connor_Jiao  阅读(86)  评论(0编辑  收藏  举报