指针C语言系统,C语言指针

c7ba1da7fd27f90c71dc80599b42476f.png

内存中的每个字节都有一个数字. 此号码称为地址.

1 scanf(“%d”,&a);

首先c 语言 指针,将a的地址提供给scanf函数,然后该函数首先保存a的地址,然后从键盘接收数据并将其通过所存储的a的地址保存到a变量中.

指针存储地址:

1个int * i_pointer; 2 i_pointer =&i; 3 //假设i的地址为0x001,则0_001存储在i_pointer中.

*称为值运算符; &称为地址运算符

9f2125d49aa081202d624077b3fbf7f4.png

指针和指针变量: 变量的地址称为指针c 语言 指针,而c语言中的一些特殊变量专门存储变量的地址,这些变量称为指针变量.

1 int i=2000; //定义一个变量

2 int *i_pointer;//定义一个指针变量 这里的*表示i_pointer是一个指针变量

3 i_pointer=&i;//&i是将i的地址赋值给指针变量i_pointer

4 printf("%d\n",*i_pointer);//输出值为2000,这里的*表示指针,即可以通过指针变量里面i的地址取到i变量的值

示例分析:

1 #include

2 #include

3 intmain()4 {5 int a,b; //定义两个变量a,b

6 int *i_pointer1,*i_pointer2;//定义两个指针变量i_pointer1,i_pointer2

7 a=100;8 b=10; //给a b 变量分别赋值

9 i_pointer1=&a;10 i_pointer2=&b;//将a和b变量的地址分别赋值给两个指针变量

11 printf("%d,%d\n",a,b);//输出a,b的值

12 printf("%d,%d\n",*i_pointer1,*i_pointer2);//通过指针找到指针变量中的a和b的地址然后得到值

13 return 0;14 }

如下:

6d77688eb92d7642d7e3b0a9eb6402c1.png

2-810-jpg_6-1080-0-0-1080.jpg

示例问题:

一个:

1 #include

2 #include

3 intmain()4 {5 //输入a和b两个整数,按照先大后小的顺序输出

6

7 int *p1,*p2,*p,a,b; //定义三个指针变量和两个变量

8 scanf("%d,%d",&a,&b);//从键盘输入两个数并进行接收,加地址符是为了改变a和b的值

9 p1=&a;//将a的地址值赋值给指针变量p1

10 p2=&b;//将b的地址值赋值给指针变量p2

11 if(a

12 p=p1;13 p1=p2;14 p2=p;//进行交换如果a

15 }16 printf("a=%d,b=%d\n",a,b);//输出a和b的值

17 printf("max=%d,min=%d\n",*p1,*p2);//通过指针找到指针变量里面存储的地址然后取值,输出最大最小值

18 return 0;19 }

然后在上方拆分比较函数并传递指针;

1 #include

2 #include

3 intmain()4 {5 //输入a和b两个整数,按照先大后小的顺序输出

6 void max(int *p1,int *p2);7 int *p1,*p2,a,b; //定义三个指针变量和两个变量

8 scanf("%d,%d",&a,&b);//从键盘输入两个数并进行接收,加地址符是为了改变a和b的值

9

10 p1=&a;//将a的地址值赋值给指针变量p1

11 p2=&b;//将b的地址值赋值给指针变量p2

12 if(a

13 max(p1,p2);//传递的参数为指针变量

14 }15 printf("a=%d,b=%d\n",a,b);//输出a和b的值

16 printf("max=%d,min=%d\n",*p1,*p2);//通过指针找到指针变量里面存储的地址然后取值,输出最大最小值

17 return 0;18 }19 void max(int *p1,int *p2){ //p1为指针变量 加*则指向变量

20 intp;21 p=*p1;//p=a

22 *p1=*p2;//a=b

23 *p2=p;//b=p

24 }

两个: 输入三个数字:

2-810-jpg_6-1080-0-0-1080.jpg

1 #include

2 #include

3 intmain()4 {5 //输入a和b和c三个整数,按照先大后小的顺序输出

6 void max(int *p1,int *p2);7 int *p1,*p2,*p3,a,b,c; //定义三个指针变量和两个变量

8 scanf("%d,%d,%d",&a,&b,&c);//从键盘输入两个数并进行接收,加地址符是为了改变a和b的值

9

10 p1=&a;//将a的地址值赋值给指针变量p1

11 p2=&b;//将b的地址值赋值给指针变量p2

12 p3=&c;//将c的地址值赋值给指针变量p3

13 if(a

14 max(p1,p2);//传递的参数为指针变量

15 }16 if(a

24 return 0;25 }26 void max(int *p1,int *p2){ //p1为指针变量 加*则指向变量

27 intp;28 p=*p1;//p=a

29 *p1=*p2;//a=b

30 *p2=p;//b=p

31 }

指针和数组:

1 int a[10]; //定义一个一维数组2 int *p;//定义一个指针3 p=&a[0];//将数组中第0个元素的地址赋值给指针,注意p=a等同于p=&a[0]

如图所示:

cafa9c04f0a60d4d144f14ec3b898bac.png

================================================ ==== ============================================== ==== ============================================== ==== =

9-810-jpg_6-1080-0-0-1080.jpg

定义数组并以三种方式输出数组中的元素:

1 #include

2 #include

3 intmain()4 {5 //定义一个数组,按照下标法输出

6 int i,a[10];7 printf("请输入十个数:\n");8 for(i=0;i<10;i++){9 scanf("%d",&a[i]);10 }11 //通过下标输出

12 for(i=0;i<10;i++){13 printf("%d",a[i]);14 }15 //通过计算数组元素的地址找到元素

16 for(i=0;i<10;i++){17 printf("%d",*(a+i));//&a[i]可以用(a+i)表示

18 }19 return 0;20 }

1 #include

2 #include

3 intmain()4 {5 //定义一个数组,按照下标法输出

6 int i,a[10],*p;7 printf("请输入十个数:\n");8 for(i=0;i<10;i++){9 scanf("%d",&a[i]);10 }11 //指针变量指向数组元素

12 for(p=a;p

13 printf("%d",*p);//14 }15 return 0;16 }

指针和二维数组:

1 //输入指定的行号和列号输出对应的值

2 #include

3 #include

4 intmain()5 {6 int (*p)[3];//定义一个二维数组的指针

7 inti,j;8 int a[2][3]={{1,2,3},{4,5,6}};9 p=a;//指针指向首地址

10 printf("请输入行号:\n");11 scanf("%d",&i);12 while(i>=2){13 printf("请重新输入行号,输入值不合法。");14 }15 printf("请输入列号:\n");16 scanf("%d",&j);17 while(j>=3){18 printf("请重新输入列号,输入值不合法。");19 }20 printf("\n");21 printf("a[%d][%d]=%d\n",i,j,*(a[i]+j));22 return 0;23 }

指向函数的指针变量:

1 #include

2 #include

3 #if(0)

4 intmain()5 {6 int max(int,int);7 inta,b,c;8 printf("请输入a和b:");9 scanf("%d,%d",&a,&b);10 c=max(a,b);11 printf("max=%d\n",c);12 return 0;13 }14 int max(int x,inty){15 intz;16 if(x>y){17 z=x;18 }else{19 z=y;20 }21 returnz;22 }23 #endif

24

25 #if(1)

26 intmain()27 {28 int max(int,int);29 int (*p)(int,int);//定义一个指向函数的指针

30 inta,b,c;31 p=max;//指针变量p指向函数,将函数的入口地址赋值给指针变量

32 printf("请输入a和b:");33 scanf("%d,%d",&a,&b);34 c=(*p)(a,b);//通过指针变量调用函数

35 printf("max=%d\n",c);36 return 0;37 }38 int max(int x,inty){39 intz;40 if(x>y){41 z=x;42 }else{43 z=y;44 }45 returnz;46 }47 #endif

使用指向函数的指针作为函数参数:

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/jisuanjixue/article-243037-1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值