
内存中的每个字节都有一个数字. 此号码称为地址.
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语言中的一些特殊变量专门存储变量的地址,这些变量称为指针变量.
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 }
如下:


示例问题:
一个:
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 }
两个: 输入三个数字:

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]
如图所示:

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

定义数组并以三种方式输出数组中的元素:
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
好啊金华火腿下周一开盘跌停
有人需要便宜的