b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

C语言指针

电脑杂谈  发布时间:2020-06-12 14:12:26  来源:网络整理

c语言高级指针_c语言 结构体 函数指针_c 语言 指针

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

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中.

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

c语言 结构体 函数指针_c 语言 指针_c语言高级指针

指针和指针变量: 变量的地址称为指针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 <stdio.h>
 2 #include <stdlib.h>
 3 int main()
 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 }

如下:

c语言 结构体 函数指针_c 语言 指针_c语言高级指针

示例问题:

一个:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 int main()
 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<b){//将a和b进行比较
12         p=p1;
13         p1=p2;
14         p2=p;//进行交换如果a<b的话,将a的地址值赋值给p2,b的地址值赋值给p1
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 <stdio.h>
 2 #include <stdlib.h>
 3 int main()
 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<b){//将a和b进行比较
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     int p;
21     p=*p1;// p=a
22     *p1=*p2;//a=b
23     *p2=p;//b=p
24 }

两个: 输入三个数字:

c 语言 指针_c语言高级指针_c语言 结构体 函数指针

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 int main()
 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<b){//将a和b进行比较
14         max(p1,p2);//传递的参数为指针变量
15     }
16     if(a<c){
17         max(p1,p3);
18     }
19     if(b<c){
20         max(p2,p3);
21     }
22     printf("a=%d,b=%d,c=%d\n",a,b,c);//输出a和b的值
23     //printf("max=%d,min=%d\n",*p1,*p2);//通过指针找到指针变量里面存储的地址然后取值,输出最大最小值
24     return 0;
25 }
26 void max(int *p1,int *p2){ //p1为指针变量 加*则指向变量
27     int p;
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]

如图所示:

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

c语言高级指针_c语言 结构体 函数指针_c 语言 指针

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

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 int main()
 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 <stdio.h>
 2 #include <stdlib.h>
 3 int main()
 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<(a+10);p++){ //p指向数组的首地址
13         printf("%d",*p);//
14     }
15     return 0;
16 }

指针和二维数组:

 1 //输入指定的行号和列号输出对应的值
 2 #include <stdio.h>
 3 #include <stdlib.h>
 4 int main()
 5 {
 6     int (*p)[3];//定义一个二维数组的指针
 7     int i,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 <stdio.h>
 2 #include <stdlib.h>
 3 #if(0)
 4 int main()
 5 {
 6     int max(int,int);
 7     int a,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,int y){
15     int z;
16     if(x>y){
17         z=x;
18     }else{
19         z=y;
20     }
21     return z;
22 }
23 #endif
24 
25 #if(1)
26 int main()
27 {
28     int max(int,int);
29     int (*p)(int,int);//定义一个指向函数的指针
30     int a,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,int y){
39     int z;
40     if(x>y){
41         z=x;
42     }else{
43         z=y;
44     }
45     return z;
46 }
47 #endif

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


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-243037-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 牛殳
        牛殳

        有人需要便宜的

      • 酒巴店主
        酒巴店主

        好啊金华火腿下周一开盘跌停

      热点图片
      拼命载入中...