C语言入门:指针的概要

 1 /* Note:Your choice is C IDE */
 2 #include "stdio.h"
 3 void main()
 4 {
 5     //指针
 6     //什么是指针  一个变量的地址 就是该变量的指针 
 7     // 咱们学习的C语言里把  地址 叫做指针
 8     //如果想访问地址 需要用什么方法, 那只能用指针 这种方法。
 9     int a;
10     a=5;
11     //scanf("%d",&a);
12     printf("a=%d 是数字:\n",a);
13     printf("a=%d 这一串数字 就是地址编码",&a);//属于 指针的一种 & 就是指针的一种运算符 小方法
14 }
 1 /* Note:Your choice is C IDE */
 2 #include "stdio.h"
 3 void main()
 4 {
 5     //指针怎么定义。
 6     int a;//类型说明符  变量名。
 7     //指针想指向 一个变量的地址 的时候, 需要和这个变量的类型  想匹配。
 8     int *p;//指针类型说明符  * 指针变量名    point(指针的意思)
 9     //如何使用指针, 怎么使用指针。 
10     //1.先给普通变量一个值。
11     printf("请输入一个数:");
12     scanf("%d",&a);//输入一个数字
13     //2.通过 指针变量  指向 该变量的地址。
14     p=&a;//指针 只能  指向地址。
15       //1638212     1638216
16       //  100      
17       //++     --   指针变量 可以通过这两个  单目运算符  进行 地址 移动 
18       //   ++3
19       //   ++a    //单目 ++,--  只能和变量一起 使用。 如果和常量 就报错(语法错误)。
20       //指针是变量 不是常量
21     //1.直接输出的方法、
22     printf("直接方法:a=%d\n",a);
23     //2.间接输出的方法 (指针)
24     printf("间接方法:a=%d\n",p);//加 * 可以直接 取出地址里面 数值。
25 }
 1 /* Note:Your choice is C IDE */
 2 #include "stdio.h"
 3 void main()
 4 {
 5     //指针偏移 用什么符号,偏移的时候 每一偏移多大空间,用什么来确定。
 6     //偏移用++,-- 。   int *p;  ++p,p++,--p,p--  先减或后减  和之前规则 一样。
 7     int  a,*p;//定义一个普通变量,和一个指针变量
 8     //int *p=&a;叫指针的初始化赋值。
 9     printf("请输入一个数:");
10     scanf("%d",&a);
11     //指针 指向变量   建立关系
12     p=&a;
13     //通过 直接 或间接的 方法(指针) 输出 a的 值 和地址。
14     printf("直接的方法:a=%d,直接的方法 输出地址:%d\n",a,&a);
15     printf("间接的方法:a=%d,间接的方法 输出地址:%d\n",*p,p); 
16     //偏移的时候 每一偏移多大空间,用什么来确定。一个类型的大小。 
17     //int float double  char   它们的字节 分别占多少,那么指针偏移的时候,就偏移多少
18     //4    4     8        1
19     //验证一下
20      ++p;//只对指针进行了 偏移。
21     //通过指针偏移之后  直接 或间接的 方法(指针) 输出 a的 值 和地址。
22     printf(" 指针偏移之后  直接的方法:a=%d,直接的方法 输出地址:%d\n",a,&a);
23     printf(" 指针偏移之后  间接的方法:a=%d,间接的方法 输出地址:%d\n",*p,p);  
24 }
 1 /* Note:Your choice is C IDE */
 2 #include "stdio.h"
 3 void main()
 4 {
 5     //多个空间偏移的时候 是不是 用 循环。(数组)
 6     int  b[5],i;//一个连续存储的空间。数组名是数组的首地址。 +长度
 7     int *p;//指针变量
 8     p=b;//指针变量 指向 数组的首地址 即可。
 9     p=&b[0];//第一个元素的地址 就是首地址。
10     //给数组进行输入
11     for(i=0;i<5;i++)
12     {
13         printf("请输入一个数:");
14         scanf("%d",&b[i]);
15     }
16     //输出数组中的值。  1.直接用数组输出    2. 间接用指针输出//下标法。
17     printf("1.直接用数组输出\n");
18     for(i=0;i<5;i++)
19     {
20          printf("%d ",b[i]);
21     }
22     
23     printf("\n2. 间接用指针输出\n");
24     for(i=0;i<5;i++)  //p=b
25     {
26          printf("%d ",p[i]);
27     }
28       printf("\n--------------------------\n");//指针法。
29     for(i=0;i<5;i++)
30     {
31          printf("%d ", *(p+i));    ///  *p 普通变量 和指针变量    p=&b[0]
32     }               // *(&b[0]+i);先移动位置,在通过* 取移动之后的位置。
33     
34     printf("\n指针法\n");
35      for(i=0;i<5;i++)
36     {
37          printf("%d ",(*p)++);//(* &b[0])++  
38     }
39   
40 }
 1 /* Note:Your choice is C IDE */
 2 #include "stdio.h"
 3 void main()
 4 {
 5     //利用指针中间变量 求2个数的交换。 
 6     int a,b,t;
 7     int *p,*p1;
 8     printf("请输入a的值:");
 9     scanf("%d",&a);
10     printf("请输入b的值:");
11     scanf("%d",&b);
12     p=&a;
13     // t=a;
14     // a=b;
15     // b=t;
16     //1.
17     //*p=a;
18     //a=b;
19     //b=*p;
20     //printf("a=%d,b=%d\n",a,b);
21     p1=&b;
22     t=*p;//  t=a
23     *p=*p1;// a=b
24     *p1=t;// b=t;
25     printf("a=%d,b=%d\n",a,b);
26    
27     
28 }
 1 /* Note:Your choice is C IDE */
 2 #include "stdio.h"
 3 void main()
 4 {
 5      //利用指针求 1-n的和  /   1-n的阶乘
 6      int i,n;
 7      int sum=1,*p;
 8      //1.非指针的情况
 9      printf("请输入一个数:");
10      scanf("%d",&n);
11      p=&sum;
12      for(i=1;i<=n;i++)
13      {
14           *p=*p*i;
15      }
16      printf("和为:%d",*p); 
17 }
 1 /* Note:Your choice is C IDE */
 2 #include "stdio.h"
 3 void sum(int *p,int *p1)//在子函数中 利用指针 来求2个数的和 
 4 {
 5     printf("传参后:a+b=%d\n",*p+*p1);
 6 }
 7 void change(int *p,int *p1) //在子函数中 利用指针 来求 2个数的交换
 8 {
 9     int t;                     
10     t=*p;
11     *p=*p1;
12     *p1=t;                    
13     printf(" 两个数交换:a=%d,b=%d\n",*p,*p1); 
14 }
15 
16 void jc(int n,int *p)//在子函数中 利用指针 来求  1-n的阶乘/和
17 {
18     int i;//循环变量
19     for(i=1;i<=n;i++)
20     {
21         *p=*p*i;
22     }
23     printf("指针求和为:%d",*p);
24 }
25 void main()//利用传参 来做。
26 {
27     int a,b,n,su=1;
28     printf("请输入a的值:");
29     scanf("%d",&a);
30     printf("请输入b的值:");
31     scanf("%d",&b);
32     sum(&a,&b);
33     
34     change(&a,&b);
35     
36     printf("请输入一个数:n-->");
37     scanf("%d",&n);
38     jc(n,&su);
39 }
 1 /* Note:Your choice is C IDE */
 2 #include "stdio.h"
 3 void main()//利用指针 求出数组 奇数  偶数
 4 {
 5     int a[5];//数组
 6     int i,*p;//指针变量
 7     
 8     for(i=0;i<5;i++)
 9     {
10          printf("请输入一个数:");
11          scanf("%d",&a[i]);
12     }
13     p=a;
14     for(i=0;i<5;i++)
15     {
16         if(a[i]%2==0)
17         {
18              printf("%d为偶数,\n",a[i]);
19         }
20         else
21         {
22             printf("%d为奇数,\n",a[i]);
23         }
24     }
25     //直接拿 指针变量 替换掉 数组名。
26     printf("\n直接拿 指针变量 替换掉 数组名。\n");
27     for(i=0;i<5;i++)
28     {
29         if(p[i]%2==0)
30         {
31              printf("%d为偶数,\n",p[i]);
32         }
33         else
34         {
35             printf("%d为奇数,\n",p[i]);
36         }
37     }
38     //指针 
39     printf("\n");
40     for(i=0;i<5;i++)
41     {
42         if(((*p)+i)%2==0)
43         {
44              printf("%d为偶数,\n",(*p)+i);
45         }
46         else
47         {
48             printf("%d为奇数,\n",(*p)+i);
49         }
50     }
51     
52     // printf("\n");
53     //for(i=0;i<5;i++)
54     //{
55     //    if(((*p)++)%2==0)
56     //    {
57     //         printf("%d为偶数,\n",(*p)++);
58     //    }
59     //    else
60     //    {
61     //        printf("%d为奇数,\n",(*p)++);
62     //    }
63     //}
64     
65 }
 1 /* Note:Your choice is C IDE */
 2 #include "stdio.h"//传参的大致 规则,  主函数 输入数据  传参给子函数  子函数进行 数据处理
 3 float avg(int *p,int len)//len代表数组的长度  ② 指针变量指向数组初始化相关变量
 4 {
 5 //⑦ 自定义函数实现求10名学生成绩的平均值,将平均值返回
 6 //⑧ 计算成绩总和
 7 //⑨ 计算平均值
 8 //⑩ 返回平均值
 9     int  i,sum=0;//循环变量  下标
10     for(i=0;i<len;i++)
11     {
12         sum=sum+(*(p+i));//④ 要求使用指针法引用到数组元素
13     }
14     return (float)sum/len; //float
15 }
16 void main()
17 {
18 //调用函数求10名学生成绩的平均值,将平均值返回给主函数并输出。
19 //要求:使用数组和指针变量,调用函数实现功能
20 //注:无效果,不得分
21 //① 正确定义变量、数组和指针变量
22   int a[10];
23   int i;
24   float pj;
25   for(i=0;i<10;i++) //③ 在主函数中输入10名学生的成绩
26   {
27        printf("请输入一个数;");
28        scanf("%d",&a[i]);
29   }
30   pj= avg(a,10);//数组 传递的时候,  只需要 传递 数组名  和长度。  ⑤ 正确调用函数,传递数组,并将平均成绩返回
31   printf("平均分为:%.2f\n",pj);//⑥ 在主函数中正确输出平均成绩
32 }

 

posted @ 2020-02-06 19:03  平常xin  阅读(218)  评论(0编辑  收藏  举报