当前位置: 移动技术网 > IT编程>开发语言>C/C++ > C语言指针详解

C语言指针详解

2019年05月09日  | 移动技术网IT编程  | 我要评论

汪嘉年,河南教育学院首页,年会节目小品剧本

c语言指针

以下讲解是按照如下这个程序的执行顺序来讲解的

 1     int a,b; //这是一个普通的整型变量
 2     int *p;//这是一个整形的指针
 3     a = 3;
 4     b = 4;
 5     6 
 7     printf("    a的地址:%d;\r\n", &a);
 8     printf("    b的地址:%d;\r\n", &b);
 9     printf("    p的地址:%d;\r\n", &p);
10     printf("    p的值:%d,现在p的值是不确定的,目前只是为p申请了地址,还没有为它赋值;\r\n", p);
11     
12     p = &a;//取址运算/* p现在指向a */
13     printf("    利用取址操作p = &a;,把a的地址赋值给p,现在p的值是%d,也就是a的地址;\r\n", p);
14     printf("    p的地址没有变化,p的地址仍然是%d,在这个地址上存储的是变量a的地址;\r\n", &p);
15     
16     printf("    利用*运算符得到指针p指向地址中的数值为%d,在刚才p已经指向变量a的地址了,所以指针p指向地址中的值是3,但是p的值仍然是a的地址;\r\n", *p);
17     
18     b = *p;/* b现在为a的值 */
19     printf("    b = *p;,现在b的值就是p指向地址中的值,也就是a的值:%d;\r\n", b);
20 
21     *p = 5;/* a现在为5 */
22     printf("    现在利用*p为p指向地址中存储的值进行赋值:%d,这时a的值也已经改变了:%d;\r\n", *p,a);

先做如下定义并把详细信息打印出来

1     int a,b; //这是一个普通的整型变量
2     int *p;//这是一个整形的指针
3     a = 3;
4     b = 4;
5 
6     printf("    a的地址:%d;\r\n", &a);
7     printf("    b的地址:%d;\r\n", &b);
8     printf("    p的地址:%d;\r\n", &p);
9     printf("    p的值:%d,现在p的值是不确定的,目前只是为p申请了地址,还没有为它赋值;\r\n", p);

指针p定义的时候没有进行初始化,所以在这里,p的初始值是不确定的。
当然也可以在p定义的时候赋初值,这样p的初始值就是确定的了。

1     p = 1;

一元运算符&可用于取一个对象的地址,如下,这时p为指向a的指针。地址运算符&只能应用于内存中的对象,即变量与数组元素。它不能作用于表达式、常量或register类型的变量。

这时p的值是3930420,即变量a的地址;

利用&取出p的地址仍然为3930396,没有变;

利用间接寻址*,*p可以得到指针p指向地址中的值为3,即a的值。

1     p = &a;//取址运算/* p现在指向a */
2     printf("    利用取址操作p = &a;,把a的地址赋值给p,现在p的值是%d,也就是a的地址;\r\n", p);
3     printf("    p的地址没有变化,p的地址仍然是%d,在这个地址上存储的是变量a的地址;\r\n", &p);
4     
5     printf("    利用*运算符得到指针p指向地址中的数值为%d,在刚才p已经指向变量a的地址了,所以指针p指向地址中的值是3,但是p的值仍然是a的地址;\r\n", *p);
6     

 利用*可以得到p地址中的数值,这里b的值就是3,即a的值。

1     b = *p;/* b现在为a的值 */
2     printf("    b = *p;,现在b的值就是p指向地址中的值,也就是a的值:%d;\r\n", b);

对*p进行赋值后,也就是对p指针指向地址中的数值进行赋值,这是a的值也就变为了5

*p = 5;/* a现在为5 */
    printf("    现在利用*p为p指向地址中存储的值进行赋值:%d,这时a的值也已经改变了:%d;\r\n", *p,a);

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网