黑马程序员技术交流社区
标题:
1001-指针与指针变量
[打印本页]
作者:
wangshengjie
时间:
2015-3-13 00:35
标题:
1001-指针与指针变量
本帖最后由 Micro 于 2015-3-17 14:39 编辑
/*
一、指针与指针变量:【指针是一个地址,而指针变量是存放地址的变量,指针变量的值是地址(即指针)】
1、指针:一个变量的地址称为该变量的"指针";
2、指针变量:若一个变量专门用来存放另一个变量的地址(指针),则称该变量为"指针变量";
二、指针变量的定义与引用
1、格式:基类型 *指针变量名; 例如:float *pointer_1; char *pointer_2;
2、引用:基类型 *指针变量名 = &变量名; 或者 指针变量名 = &变量名;
例如:
float a;
float *pointer_1 = &a; 或 pointer_1 = &a;
3、说明:
(1)指针变量前面的"*"表示该变量的类型为指针型变量,指针变量名为pointer_1,而非 *pointer_1;
(2)定义指针时必须指定基类型;某基类型的指针变量只能存放其对应类型变量的地址;
例如:
int b;
float a;
float *pointer_1;
pointer_1 = &a;//pointer_1只能存放float类型变量的地址
pointer_1 = &b;//错误,不能存放int型变量的地址
(3)&:取地址运算符;*:指针运算符(间接访问运算符),取其指向的内容;
例如:
float a=3.14159;
float *pointer_1;
"&"与"*"两个运算符的优先级别相同,但是按自右向左结合。
&*pointer_1 《=》 &(*pointer_1)《=》&a;
*&a《=》*(&a)《=》*pointer_1《=》a;
(*pointer_1)++《=》a++;
++和*优先级别相同,按自右向左结合,而"++"在pointer_1之后,
因此先对pointer_1的原值进行*运算,得到a值,然后改变pointer_1
的值,此时pointer_1不再指向a。
*pointer_1++《=》*(pointer_1++)
"++"在pointer_1之前,因此先对pointer_1的原值进行"++"运算,改变pointer_1
的值,此时pointer_1不再指向a。*pointer_1的值是指向新地址中所存储的值。
*++pointer_1《=》*(++pointer_1)
*/
#include <stdio.h>
int main(int argc,const char *argv[])
{
int a=1990, b=1011, c, d;
int* pointer_1;
int* pointer_2;
pointer_1 = &a;
pointer_2 = &b;
printf("%d %d\n", a, b);//运行结果:1990 1011
printf("%d %d\n", *pointer_1,* pointer_2);//运行结果:1990 1011
printf("%p %p\n", pointer_1, &a);
printf("%p %p\n", pointer_2, &b);
c = *pointer_1++; //先将*pointer_1的值(即a)赋给c,再改变pointer_1的值
d = *++pointer_2; //先改变pointer_1的值,再将*pointer_1的值赋给d
printf("%d %d\n", a, c);
printf("%d %d\n", b, d);
printf("%p %p %p\n", &a, &c, pointer_1);
printf("%p %p %p\n", &b, &d, pointer_2);
return 0;
}
/*
----------------------------------------
1990 1011
1990 1011
001FF8A8 001FF8A8
001FF8A4 001FF8A4
1990 1990
1011 1990
001FF8A8 001FF8A0 001FF8AC
001FF8A4 001FF89C 001FF8A8
----------------------------------------
*/
作者:
Micro
时间:
2015-3-17 14:39
请不要乱标板块公告 。。。差评。不奖励
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2