欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C语言指针详解

程序员文章站 2022-03-25 19:09:42
c语言指针 以下讲解是按照如下这个程序的执行顺序来讲解的 先做如下定义并把详细信息打印出来 指针p定义的时候没有进行初始化,所以在这里,p的初始值是不确定的。当然也可以在p定义的时候赋初值,这样p的初始值就是确定的了。 一元运算符&可用于取一个对象的地址,如下,这时p为指向a的指针。地址运算符&只能 ......

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;

C语言指针详解

一元运算符&可用于取一个对象的地址,如下,这时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);

C语言指针详解

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

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

C语言指针详解