指针没学会,重新拾起c语言书🧐,一边看书一边写博客总结知识点。😜
💥
1)指针是一个地址(例如i的指针是2000);指针变量是存放地址的变量(例如i-pointer);*i-pointer表示指针变量i-pointer指向的对象,即变量i(*表示指向)
【如 i=3;i-pointer=&i;*i-pointer=3;】
2)一个变量的指针的含义包括两个方面:一是以存储单元编号表示的纯地址(如编号为2000的字节),一是它指向的存储单元的数据类型(如int,char,float);
💥*pointer的含义
int *pointer;
//定义两个指针变量,*表示该变量是指针变量
printf("*pointer=%d",*pointer);
//表示指针变量pointer所指向的变量
💥引用指针变量
1)给指针变量赋值
p=&a;
2)引用指针变量指向的变量
printf(“%d\n",*p);
//输出指针变量p所指向的变量的值
3)引用指针变量的值
printf(“%o”,p);
//以八进制数形式输出指针变量p的值
🔥输入三个整数a,b,c,要求按从小到大的顺序将它们输出
#include<stdio.h>
int main()
{
void change(int *p1,int *p2,int *p3);
int a,b,c,*p1,*p2,*p3;
printf("input a,b,c:");
scanf("%d%d%d",&a,&b,&c);
p1=&a;p2=&b;p3=&c;
change(p1,p2,p3);
printf("%d\t%d\t%d\t",a,b,c);
return 0;
}
void change(int *p1,int *p2,int *p3)
{
void swap(int *pt1,int *pt2);
if(*p1<*p2) swap(p1,p2);
if(*p1<*p3) swap(p1,p3);
if(*p2<*p3) swap(p2,p3);
//交换a,b,c的值,而非指针变量的值
}
void swap(int *pt1,int *pt2)
{
int temp;
temp=*pt1;
*pt1=*pt2;
*pt2=temp;
}
函数的调用只能得到一个返回值,而使用指针变量做参数,可以得到多个变化了的值。
💥通过指针引用数组
在c语言中,数组名代表数组中首元素的地址
【 p=&a[0]; 等价于 p=a;】
指针的加减运算:(当指针指向数组元素时)
(1)加一个整数,p+1
【p+1指向同一数组中的下一个元素,1不是将p的值加1,而是加上一个数组元素所占的字节数,即p+1*d,d是一个数组元素所占的字节数】
(2)减一个整数,p-1
(3)自加运算,p++,++p
(4)自减运算,p–,--p
(5)两个指针相减,p1—p2 (指向同一数组)
p1与p2之间差的元素个数
🔥🔥
p 指针变量
p 指针变量指向的元素
p+i 数组元素a[i]的地址,即(a+i)
(p+i) 数组元素a[i],即(a+i)
p[i] p 指向a[2],则p[3]代表a[2+3]即a[5]
p++ 等价于(p++),先引用p,再使p自加
++(*p) 表示p所指向的元素值加1
后续。。。。