C 指针
1 、 指针是C语言中一个重点,同时也是一个难点,正确地使用指针,可以表示复杂的数据结构,数组等的内容,同时也可以动态地操作内存。
指针———内存中的地址就是指针。
2、例子:
int a =1;
float b = 1.5 ;
char c = 'x';
变量 | 地址 | 内存用户数据区 |
---|---|---|
a | 1000 | 1 |
b | 1001 | 1.5 |
c | 1002 | 'x' |
1003 |
例子分析:
(1)首先,在程序上,我们是定义了一个整形变量并赋值1。而实际上,变量a会被分配一个内存的存储空间,用于存放它的值1,而这每个内存的存储空间有一个地址,通过上面的表格,我们可以看到这个地址是1000,所以,变量a中的值就是存放在内存中地址为1000这个位置中。
而这个内存中的地址1000就是变量a的指针,或称为变量a的地址。
3、定义指针变量
定义指针变量的一般格式:
基类型 * 指针变量名
格式分析:
(1)基类型,其实就是我们前面学习变量定义时的类型,即整型int,浮点型float,
字符型char。
(2)*,星号,用于说明将要定义的变量是用于存放地址的
(3)指针变量名,其实就是变量名,命名规则与变量定义是一样的。
例子:
int *a;
float *b;
char *c;
4、指针变量的赋值与引用
指针变量的赋值格式:
指针变量 = &变量;
针变量的引用格式:
* 指针变量;
分析:
&:取地址运算符,就是取出后面变量的地址,然后,通过=将地址赋给指针变量。
*:指针运算符(或称“间接访问”运算符),就是指向后面的”指针变量“的地址所指向存储单元。
例子:
int x=1; //假设x被分配的内存地址是1000
float y=1.5; //假设y被分配的内存地址是1001
char z='a'; //假设z被分配的内存地址是1002
int *a;
float *b;
char *c;
a=&x; //将变量x的地址1000赋给指针变量a,则a中的内容是1000
b=&y; //将变量y的地址1001赋给指针变量b,则b中的内容是1001
c=&z; //将变量z的地址1002赋给指针变量c,则c中的内容是1002
*a; //指向a中存放的地址,即指向内存地址1000的存储单元,而这个单元中的内容是
1,所以,结果就是1。
*b; //指向b中存放的地址,即指向内存地址1001的存储单元,而这个单元中的内容是
1.5,所以,结果就是1.5。
*c; //指向c中存放的地址,即指向内存地址1002的存储单元,而这个单元中的内容是
'a',所以,结果就是'a'。
5、指针变量与变量指针区别
接下来,我们要比较一下这两个说法:
(1)变量指针——指的就是变量的地址,例如,上面表格中变量a的地址1000就是变量指针。(也就是说a的变量指针是1000,换个说法就是a的变量地址是1000)
例如:int a=1;
//我们可以说a变量指针是1000,换个说法就是a变量的地址是1000
//从代码上来说,a中的值是1
(2)指针变量——用于存放地址的变量。
例如:int *b = &a;
//我们可以说将变量a的地址1000赋给指针变量b
//从代码上来说,a中的值是1
//从代码上来说,b中的值是1000
//而*b就是指向内存中地址为1000的存储单元,而这个存储单元中的数据为1
这两个内容很容易混淆,大家要注意理解,另外,(指针等价于地址)
指针的内容比较复杂,但是,大家不用害怕,只要先做到记住指针就是内存地址,以及指针变量的定义格式与赋值和引用格式,然后,多练习几次,再重复结合其它的知识点一起训练,再训练,自然就可以从最初的记住,到熟练,然后,再到灵活运用了。
非常好,现在,我们已经掌握了C中的“指针”这个知识点,但是,如何去运行用它呢?所以,我们就要通过下方的按钮进入到游戏中,然后,运用“指针”去完成任务,这样,才可以加深大家对每个知识点的理解和运用,以及“尽快进入到编程的状态”。
不要停留在理论规则上面,快动起来吧!
(通过游戏模式学习与训练,需要在电脑上运行)