- 指针也是一个变量;只能装地址,不能装常量;
- 指针一般用p、q、m、n 来表示,不用b表示;
- 指针的类型与它指向的变量的类型一致;
- 指针运算符: * 、 & ( * 代表指针;& 代表地址 )
int 占内存2个b
float 占内存4个b
int a=3,b=4,d;
int *b=&a; // * 代表指针;& 代表地址
int *b=5; // 会报错,因为只能装地址,不能装常量
printf("%d",a);
printf("%d",*b); //要用到a的值得话,用 *b ; b 是 a 的指针;b 是 a 的地址;*b 表示该指针指向的变量的值
printf("%d",b); //要用到a的地址得话,用 b ,内存地址是个十六进制值;计算机内存一般以16进制来表示。b 表示该指针指向的变量的地址
int c=*b+1; // ;
printf("%d",c);
p1=&a; // 不能是 *p1=&a ,会报错
p2=&b;
d=*p1+*p2;
p2=&a;
p=&(a+1); // 错误写法
打印出:
3
3
22316
4
// 定义指针的两种方式
int a, *p; // 一
p=&a;
int a, *p=&a; // 二
指针版最大数:
int main(int argc, char *argv[]) {
int a,*p=&a,i,max=0,*p1=&max;
for(i;i<10;i++){
scanf("%d",p);
if(*p>*p1){
p1=p;
}
}
printf("最大数是:%d",*p1);
return 0;
}
数组变量指针;
p指向谁的地址,此时就替代谁来 *** 作;
注意点:
数组名本身是特殊的指针,是个常量,不能参加运算,比如:
int a[]={1,2} 、char a[]=“Hello W”
a --> 数组名本身,默认是数组第一个元素
指针p是个变量,比如:
*p=“Hello W”
int *p,i;
int a={1,2,3,4,5};
p=a;// *p=a[0]=1
p++; // 2
p=a+4;
printf("%d", *p); // 5 主要看指针指向哪,移到哪就代表哪个地方
p--; // 4
main() {
// 斐波那契前12项之和 指针版
int *p,sum=2;
int a[12]; // 一般都是12个元素;10、11 也可以,但是9就不行了,因为下边有一句*p=*(p-1)+*(p-2),指针是可以动的,这里可以扩充两个元素
p=a;
*p=1;
printf("第一项是 %d",*p);
p++;
*p=1;
printf("第二项是 %d",*p);
p++; // 需要定位到从下标2开始,也就是第3项开始 ;或者for括号里写 p=a+2
for(;p<=(a+11);p++){ // p<(a+11) 也可以写成 p<=a+11
*p=*(p-1)+*(p-2);
printf("\n%d",*p); // a[i]
sum=sum+*p;
}
printf("\n斐波那契数列前12项和=%d",sum);
return 0;
}
指针与数组的关系:
二维数组一般用保留 i 的方式去处理;
一维数组用哪种方式都行。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)