在OOP
语言中,比如Java
是没有指针这个概念的。或者说,在Java中,任何成员变量全部是指针。
但是在C语言中,有指针的概念。而且,C必须使用指针,不然很多东西无法表达了。那么,如何理解int * p_num = #
呢?
int num = 9;
int * p_num = #
上面这两句代码,就完成了一个指针初始化的操作。但是上面这句话,很容易给人误导。让人困惑到底是给*p_num
赋值为&num
了还是给p_num
赋值为&num
了。但是,如果写成这样的:
int num = 9;
int * p_num;
p_num = #
就很容易理解了。其实上面和下面这两种形式表达的含有是相同的。
但是如果是使用下面的方式,我们在使用*p_num
的时候,就很放心地知道,当前这个变量的值是num
,也就是9
.
再看如何利用指针进行数据操作:
// 间接运算符
*p_num = 123;
// *p_num 表示 取地址p_num的空间
// 然后是赋值运算,将123 存放到P_num所指向的空间
//这也就表明了现在 *p_num完全可以替代num进行对该空间做任何操作!
完整程序如下:
#include <stdio.h>
int main(void){
// 指针的赋值方式一
// int num = 9;
// int * p_num;
// p_num = #
// printf("*p_num = %d , p_num = %p",*p_num,p_num);
// 指针的赋值方式二
int num = 9;
int *p_num = #
int* p1_num = #
printf("*p_num = %d , p_num = %p , p1_num = %p\n",*p_num,p_num,p1_num);
// 间接运算符
*p_num = 123;
// *p_num 表示 取地址p_num的空间
// 然后是赋值运算,将123 存放到P_num所指向的空间
// 这也就表明了现在 *p_num完全可以替代num进行对该空间做任何操作!
printf("*p_num = %d , p_num = %p , p1_num = %p , *p1_num = %d\n",*p_num,p_num,p1_num,*p1_num);
return 0;
}
完整输出如下:
*p_num = 9 , p_num = 0029ff04 , p1_num = 0029ff04
*p_num = 123 , p_num = 0029ff04 , p1_num = 0029ff04 , *p1_num = 123
Process returned 0 (0x0) execution time : 0.463 s
Press any key to continue.