指针是c语言中的重要概念,也是c语言的重要特色。使用指针,可以使程序更加简洁。
1.数据在内存中的存储方式:按数据类型给在内存为其分配一定数量的存储单元(字节)。
2.内存单元的地址:内存单元的编号,与变量名对应。
3.内存单元的内容:值
4.变量的直接访问方式:按变量的地址(即变量名)存取变量值的方式。
5.变量的间接访问方式:将变量的地址放在另一个内存单元中,先到另一个内存单元中取得变量的地址,再由变量的地址找到变量并进行数据存取。
变量pointer为指针变量,存放的是变量i的内存地址,我们说pointer指向i的地址。
6.指针的概念:一个变量的地址称为该变量的指针。
7.指针变量:专用用于存储其他变量地址的变量。
指针与指针变量的区别,也就是值与变量的区别。
指针变量的定义:
1.定义方式: 类型标识符 *指针变量名;
2.指针变量的三要素:
指针变量的类型:和其所指变量的类型一致
指针变量的值:另一个变量在内存的地址
指针的名字:起发同普通变量
3.说明
标识符前面的*,表示该变量是指针变量,但是*后才是指针变量的名字。
指针变量赋值:1.指针变量名=某一地址;(&取某一地址符)
2.指针变量名= 另一个已赋值的指针变量
例如:int i,*p,*q;
p=&i;//方式一
q = p;//方式二
![]()
指针运算
例如:int *p,i;
char *q,c;
p = &i;q = &c;
p++,q++;
p++,q++;//执行完成后
因为p指向的int型占用两个字节空间(一般情况),自加一后指向1002,而char型占用一个字节,所以q指向2001
比较运算:p>q //为假(使用上面的程序)
int a[10];
int *p,*q;
p = &a[0];//或p=a;
q = &a[9];//或p = a+9;
求p<q,p>q为真为假?
由图可知,p<q为真
总结:两个运算符:
* : 求其后内存地址中的内容
& :求变量的内存地址
下面一个小程序总结
main()
{
int a,b;
int *pointer_1,*pointer_2;
a = 100;
b = 10;
pointer_1 = &a;
pointer_2 = &b;
printf("%d,%d\n",a,b);
printf("%d,%d",*pointer_1,*pointer_2);
}
运行结果是100,10
100,10
用图形表示为:(图中p1,p2分别表示pointer_1,pointer_2)
![]()
以下是几个变化:
1.执行语句p2 = &*pointer_1后,变为下图形式,这时,*pointer_1为a,*p2为a,p1 = p2 = &a
2.“&*pointer_1”的含义?
3.(*pointer_1)++相当于什么?
4.*&a的含义?
下一篇:http://blog.youkuaiyun.com/qmhlan/article/details/6640481(指针系列)