取地址运算符&
%p———表示对象地址的转换说明
#includeint main() { int n; printf("n的地址是%pn",&n); return 0; }
指针int型变量(hiroko):保存整数的盒子
指向int型变量的指针变量(*isako):保存“存放整数对象的地址”的盒子
当指针p的值为对象X的地址时,一般说p指向x
&sato是指向sato的指针,其值为sato的地址
指针运算符单目运算符*
·也称作:解引用运算符、间接访问运算符
将指针运算符*写于指针之前,就可以显示该指针指向的对象内容
*a : a指向的对象
当p指向x时:*p就是x的别名
指针与函数·如果要在函数中修改变量的值,就需要传入指向该变量的指针,告诉程序:
传入的是指针哦,请对指针指向的对象进行处理吧
·只要在被调用的函数里的指针前写上指针运算符*,就能间接处理该指针指向的对象,这也是*运算符又称为间接访问运算符的原因。
空指针·什么也不指向的特殊指针是空指针
·表示空指针的对象式宏NULL是空指针常量
指针和数组·数组名原则上会被解释为指向该数组起始元素的指针
即:如果a是数组,那么表达式a的值就与a[0]的地址,即&a[0]一致
·当指针p指向数组中的元素e时,
p+i 为指向元素e后第i个元素的指针;*(p+i) 可以写成p[i]
p-i 为指向元素e前第i个元素的指针; *(p-i)可以写成p[-i]
数组名在什么情况下不被视为指向起始元素的指针呢?
1.作为sizeof运算符的操作数时
sizeof(数组名)不会生成指向起始元素的指针的长度,而是生成数组整体的长度。
2.作为取址运算符&的操作数出现时
&数组名 不是指向起始元素的的指针的指针,而是指向数组整体的指针
#includeint main(void) { int i; int a[5]={1,2,3,4,5}; int *p=a; for(i=0;i<5;i++) { printf("a[%d]=%d *(a+%d)=%d p[%d]=%d *(p+%d)=%dn",i,a[i],i,*(a+i),i,p[i],i,*(p+i)); } for(i=0;i<5;i++) { printf("&a[%d]=%d a+%d=%d &p[%d]=%d p+%d=%dn",i,&a[i],i,(a+i),i,&p[i],i,(p+i)); } return 0; }



