指针
#include<stdio.h>
void main()
{
int i = 2000;
int* pointer;
pointer = &i;
printf("%d", *pointer);
}
//2000
#include<stdio.h>
void main()
{
int a, b;//定义了两个整形局部变量
int*pointer_1,*pointer_2;//定义了两个整形指针变量
a = 100;
b = 10;
pointer_1 = &a;//将a的地址赋给pointer_1
pointer_2 = &b;//将b的地址赋给pointer_2
printf("%d\n", a);//打印a的值
printf("%d\n", b);//打印b的值
printf("%d\n", *pointer_1);//打印a对应地址的值
printf("%d\n", *pointer_2);//打印b对应地址的值
}
//100
//10
//100
//10
使用指针的方法
#include<stdio.h>
void main()
{
int a, b,*p1,*p2,*p;
printf("请分别输入两个整形:");
scanf("%d %d", &a, &b);
p1 = &a;
p2 = &b;
if (a < b)
{
p = p2;
p2 = p1;
p1 = p;
}
//p1指向b,p2指向a
printf("a=%d,b=%d\n", a, b);
printf("max=%d,min=%d\n", *p1, *p2);
}
//请分别输入两个整形:2321 23
//a=2321,b=23
//max=2321,min=23
使用普通方法
#include<stdio.h>
void main()
{
int a, b,temp;
printf("请分别输入两个整形:");
scanf("%d %d", &a, &b);
if (a < b)
{
temp = b;
b = a;
a = temp;
}
printf("max=%d,min=%d\n", a, b);
}
//请分别输入两个整形:3232 2
//max = 3232, min = 2
使用函数方法
#include<stdio.h>
void swap(int* p1, int* p2);
void main()
{
int a, b;
int *p1, * p2;
printf("请分别输入两个整形:");
scanf("%d %d", &a, &b);//52 32
p1 = &a;//p1=a的地址
p2 = &b;//p2=b的地址
if (a < b)
{
swap(p1, p2);//swap(52,32)
}
printf("max=%d,min=%d", a, b);
}
void swap(int* p1, int* p2)//swap(52,32)
{
int temp;
temp = *p2;
*p2 = *p1;
*p1 = temp;
}
//请分别输入两个整形:3232 4
//max = 3232, min = 4
#include<stdio.h>
void main()
{
int a, b, c, *p1, * p2, * p3, * p;
printf("请分别输入三个整形:");
scanf("%d %d %d", &a, &b,&c);
p1 = &a;
p2 = &b;
p3 = &c;
if (a < b)
{
p = p2;
p2 = p1;
p1 = p;
}
if (a < c)
{
p = p3;
p3 = p1;
p1 = p;
}
if (b < c)
{
p = p3;
p3 = p2;
p2 = p;
}
printf("a=%d,b=%d,c=%d\n", a, b,c);
printf("max=%d\n", *p1);
}
//请分别输入三个整形:32 232 12
//a = 32, b = 232, c = 12
//max = 232
#include <stdio.h>
void first(int a[]);
void second(int a[]);
void third(int a[]);
void main()
{
int a[10];
printf("请分别输入10个整数:");
for (int i = 0; i < 10; i++)
{
scanf("%d", &a[i]);
}
first(a);
second(a);
third(a);
}
void first(int a[])//第一种:下标法
{
for (int i = 0; i < 10; i++)
{
printf("%d ", a[i]);
}
printf("\n");
}
void second(int a[])//第二种:通过数组名计算数组元素地址,找出元素的值。
{
for (int i = 0; i < 10; i++)
{
printf("%d ",*(a+i));//a+0=a[0] i是单位 a+1等于a[0]的下一个单位a[1]
}
printf("\n");
}
void third(int a[])//第三种:用指针变量指向数组元素
{
int* p;
for (p=a; p<(a+10); p++)
{
printf("%d ", *p);
}
printf("\n");
}
//请分别输入10个整数:9 8 7 6 5 4 3 2 1 0
//9 8 7 6 5 4 3 2 1 0
//9 8 7 6 5 4 3 2 1 0
//9 8 7 6 5 4 3 2 1 0
#include <stdio.h>
void first(int *a);
void main()
{
int a[10];
printf("请分别输入10个整数:");
for (int i = 0; i < 10; i++)
{
scanf("%d", &a[i]);
}
first(a);
for (int i = 0; i < 10; i++)//第一种
{
printf("%d ", a[i]);
}
printf("\n");
for (int i = 0; i < 10; i++)//第二种
{
printf("%d ", *(a + i));
}
printf("\n");
int* p;
for (p = a; p < (a+10); p++)//第三种
{
printf("%d ", *p);
}
printf("\n");
}
void first(int *a)
{
int c;
for (int i = 0; i <10/2; i++) {
c= a[i];
a[i] = a[10-1-i];
a[10-1-i] = c;
}
}
//请分别输入10个整数:232 123 233 4323 23213 3231 323 8484 723 775
//775 723 8484 323 3231 23213 4323 233 123 232
//775 723 8484 323 3231 23213 4323 233 123 232
//775 723 8484 323 3231 23213 4323 233 123 232
第一个版本
#include <stdio.h>
void first(int a[]);
int max, min;
void main()
{
int a[10];
printf("请分别输入10个整数:");
for (int i = 0; i < 10; i++)
{
scanf("%d", &a[i]);
}
first(a);
printf("max=%d,min=%d", max, min);
}
void first(int a[])
{
max = *a;
min = *a;
for (int i = 0; i < 10; i++)
{
if (max < *(a + i))
{
max = *(a + i);
}
if (min > * (a + i))
{
min = *(a + i);
}
}
}
//请分别输入10个整数:21 23 87 46 83 96 68 54 27 74
//max = 96, min = 21
第二个版本
#include <stdio.h>
void first(int *a);
int max, min;
void main()
{
int a[10];
printf("请分别输入10个整数:");
for (int i = 0; i < 10; i++)
{
scanf("%d", &a[i]);
}
first(a);
printf("max=%d,min=%d", max, min);
}
void first(int a[])
{
max = *a;
min = *a;
int* p;
for (p = a; p < (a + 10); p++)
{
if (max < *p)
{
max = *p;
}
if (min > * p)
{
min = *p;
}
}
}
//请分别输入10个整数:21 23 87 46 83 96 68 54 27 74
//max = 96, min = 21
第三个版本
#include <stdio.h>
void first(int a[]);
int max, min;
void main()
{
int a[10];
printf("请分别输入10个整数:");
for (int i = 0; i < 10; i++)
{
scanf("%d", &a[i]);
}
first(a);
printf("max=%d,min=%d", max, min);
}
void first(int a[])
{
max = a[0];
min = a[0];
for (int i = 0; i < 10; i++)
{
if (max < a[i]))
{
max = a[i];
}
if (min > a[i])
{
min = a[i];
}
}
}
//请分别输入10个整数:21 23 87 46 83 96 68 54 27 74
//max = 96, min = 21
#include <stdio.h>
void first(int *a);
void second(int* a);
void main()
{
int a[10];
printf("请分别输入10个整数:");
for (int i = 0; i < 10; i++)
{
scanf("%d", &a[i]);
}
first(a);
second(a);
}
void first(int a[])
{
for (int i = 0; i < 9; i++)
{
for (int j = i + 1; j < 10; j++)
{
if (*(a+j) > *(a + i))
{
int temp = *(a + j);
*(a + j) = *(a + i);
*(a + i) = temp;
}
}
}
printf("从大到小的排序为:");
for (int i = 0; i < 10; i++)
{
printf("%d ", a[i]);
}
printf("\n");
}
void second(int a[])
{
int *p1;
int *p2;
for (p1 = a; p1 <(a+ 9); p1++)
{
for (p2 = a + 1; p2 < (a+10); p2++)
{
if (*p2 < *p1)
{
int temp = *p1;
*p1 = *p2;
*p2 = temp;
}
}
}
printf("从小到大的排序为:");
for (int i = 0; i < 10; i++)
{
printf("%d ", a[i]);
}
printf("\n");
}
//请分别输入10个整数:14 17 27 82 44 77 92 36 99 65
//从大到小的排序为:99 92 82 77 65 44 36 27 17 14
//从小到大的排序为 : 14 17 27 36 44 65 77 82 92 99
#include <stdio.h>
void main()
{
int a[6] = { 0,1,2,3,4,5 };//一维数组
printf("a:%d\n", a);//a[0]的首地址
printf("*a:%d\n", *a);//a[0]的元素值
printf("a[0]:%d\n", a[0]);//a[0]的元素值
printf("&a[0]:%d\n", &a[0]);//a[0]的首地址
printf("a+1:%d\n", a + 1);//a[1]的首地址
printf("*(a+1):%d\n", *(a + 1));//a[1]的元素值
printf("a[1]:%d\n", a[1]);//a[1]的元素值
printf("&a[1]:%d\n", &a[1]);//a[1]的首地址
printf("a+2:%d\n", a + 2);//a[2]的首地址
printf("*(a+2):%d\n", *(a + 2));//a[2]的元素值
printf("a[2]:%d\n", a[2]);//a[2]的元素值
printf("&a[2]:%d\n", &a[2]);//a[2]的首地址
printf("a[1]+1:%d\n", a[1] + 1);//a[1]的元素值+1
printf("*(a+1)+1:%d\n", *(a + 1) + 1);//a[1]的元素值+1
}
/*
a:19921496
*a:0
a[0]:0
&a[0]:19921496
a+1:19921500
*(a+1):1
a[1]:1
&a[1]:19921500
a+2:19921504
*(a+2):2
a[2]:2
&a[2]:19921504
a[1]+1:2
*(a+1)+1:2
*/
#include <stdio.h>
void main()
{
int a[3][4] = { 0,1,2,3,4,5,6,7,8,9,10,11 };//二维数组
printf("a:%d\n", a);//a[0][0]的首地址
printf("*a:%d\n", *a);//a[0][0]的首地址
printf("a[0]:%d\n", a[0]);//a[0][0]的首地址
printf("&a[0]:%d\n", &a[0]);//a[0][0]的首地址
printf("&a[0][0]:%d\n", &a[0][0]);//a[0][0]的首地址
printf("a+1:%d\n", a+1);//a[1][0]的首地址
printf("*(a+1):%d\n", *(a + 1));//a[1][0]的首地址
printf("a[1]:%d\n", a[1]);//a[1][0]的首地址
printf("&a[1]:%d\n", &a[1]);//a[1][0]的首地址
printf("&a[1][0]:%d\n", &a[1][0]);//a[1][0]的首地址
printf("a+2:%d\n", a + 2);//a[2][0]的首地址
printf("*(a+2):%d\n", *(a + 2));//a[2][0]的首地址
printf("a[2]:%d\n", a[2]);//a[2][0]的首地址
printf("&a[2]:%d\n", &a[2]);//a[2][0]的首地址
printf("&a[2][0]:%d\n", &a[2][0]);//a[2][0]的首地址
printf("a[1]+1:%d\n", a[1] + 1);//a[1][1]的首地址
printf("*(a+1)+1:%d\n", *(a + 1) + 1);//a[1][1]的首地址
printf("*(a[1]+1):%d\n", *(a[1] + 1));//a[1][1]的值
printf("*(*(a+1)+1):%d\n", *(*(a + 1) + 1));//a[1][1]的值
}
//a:14024360
//* a : 14024360
//a[0] : 14024360
//& a[0] : 14024360
//& a[0][0] : 14024360
//a + 1 : 14024376
//* (a + 1) : 14024376
//a[1] : 14024376
//& a[1] : 14024376
//& a[1][0] : 14024376
//a + 2 : 14024392
//* (a + 2) : 14024392
//a[2] : 14024392
//& a[2] : 14024392
//& a[2][0] : 14024392
//a[1] + 1 : 14024380
//* (a + 1) + 1 : 14024380
//* (a[1] + 1) : 5
//* (*(a + 1) + 1) : 5
第一个版本
#include <stdio.h>
void main()
{
int a[3][4] = { 0,1,2,3,4,5,6,7,8,9,10,11 };//二维数组
int(*p)[4];
p = a;//a==*a==a[0]==&a[0]==&a[0][0]
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
printf("%d ", *(*(p + i) + j));
}
printf("\n");
}
}
//0 1 2 3
//4 5 6 7
//8 9 10 11
第二个版本
#include <stdio.h>
void main()
{
int a[3][4] = { 0,1,2,3,4,5,6,7,8,9,10,11 };//二维数组
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
printf("%d ", *(*(a + i) + j));
}
printf("\n");
}
}
//0 1 2 3
//4 5 6 7
//8 9 10 11
第三个版本
#include <stdio.h>
void main()
{
int a[3][4] = { 0,1,2,3,4,5,6,7,8,9,10,11 };//二维数组
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
printf("%d ", a[i][j]);
}
printf("\n");
}
}
//0 1 2 3
//4 5 6 7
//8 9 10 11
第一种方法
#include <stdio.h>
void main()
{
int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int r, l;
printf("r=");
scanf("%d", &r);
while (r >= 3|| r < 0)
{
printf("r=");
scanf("%d", &r);
}
printf("l=");
scanf(" %d", &l);
while (l >= 4 || l < 0)
{
printf("l=");
scanf(" %d", &l);
}
printf("%d", a[r][l]);
}
//r = 4
//r = 1
//l = 2
//7
}
第二种方法
#include <stdio.h>
void main()
{
int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int(*p)[4];//change
int r, l;
p = a;
printf("r=");
scanf("%d", &r);
while (r >= 3|| r < 0)
{
printf("r=");
scanf("%d", &r);
}
printf("l=");
scanf(" %d", &l);
while (l >= 4 || l < 0)
{
printf("l=");
scanf(" %d", &l);
}
printf("%d", *(*(p + r) + l));//change
}
//r = 4
//r = 1
//l = 2
//7
#include <stdio.h>
void main()
{
char *string="I Love Fishc.com!";
//char string[]="I Love Fishc.com!";
printf("%s", string);
}
两者对比(一个是指针,一个是数组)
普通方法
#include <stdio.h>
void main()
{
char a[] = "I Love FishC!";
char b[40];
int i;
for (i = 0; a[i]!='\0'; i++)
{
b[i] = a[i];
}
b[i] = '\0';
for (int i = 0; b[i]!='\0'; i++)
{
printf("%c", b[i]);
}
}
下标法
#include <stdio.h>
void main()
{
char a[] = "I Love FishC!";
char b[40];
int i;
for (i = 0; *(a + i) != 0; i++)
{
*(b + i) = *(a + i);
}
*(b + i) = '\0';
for (int i = 0; b[i] != '\0'; i++)
{
printf("%c", b[i]);
}
}
//I Love FishC!
指针方法
#include <stdio.h>
void main()
{
char a[]="I Love FishC!";
char b[40];
char *p1;
char *p2;
p1 = a;
p2 = b;
for (;*p1!='\0'; p1++,p2++)
{
*p2= *p1;
}
*p2 = '\0';
for (int i = 0; b[i]!='\0'; i++)
{
printf("%c", b[i]);
}
}
//I Love FishC!
#include <stdio.h>
char copy(char from[], char to[]);
void main()
{
char a[] = "I Love FishC!";
char b[] = "I Love Chian!";
printf("a=%s\nb=%s\n", a, b);
copy(a, b);
printf("a=%s\nb=%s\n", a, b);
}
char copy(char from[], char to[])
{
int i;
for (i = 0; from[i] != '\0'; i++)
{
to[i] = from[i];
}
to[i] = '\0';
}
//a = I Love FishC!
//b = I Love Chian!
//a = I Love FishC!
//b = I Love FishC!
#include <stdio.h>
void copy(char* p1, char* p2);
void main()
{
char a[] = "I Love FishC!";
char b[] = "I Love Chian!";
char* p1, * p2;
p1 = a;
p2 = b;
printf("a=%s\nb=%s\n", a, b);
copy(p1, p2);
printf("a=%s\nb=%s\n", a, b);
}
void copy(char *p1, char *p2)
{
//第一种
//for (; *p1 != '\0'; p1++, p2++)
//{
// *p2 = *p1;
//}
//*p2 = '\0';
//第二种
/*while ((*p2 = *p1) != '\0')
{
p2++;
p1++;
}*/
//第三种
//while ((*p2++ = *p1++) != '\0');
//第四种
/*while (*p1!= '\0')
{
*p2++=*p1++;
}
*p2='\0';*/
//第五种 退出条件while(*p1='\0'=0)
//while (*p2++ = *p1++);
//第六种
//for (; *p2++ = *p1++;);
}
//a = I Love FishC!
//b = I Love Chian!
//a = I Love FishC!
//b = I Love FishC!
#include <stdio.h>
#if (0)
void main()
{
int max(int, int);
int a, b, c;
scanf("%d %d", &a, &b);
c = max(a, b);
printf("max=%d", c);
}
#endif
#if (1)
void main()
{
int max(int, int);
int a, b, c;
scanf("%d %d", &a, &b);
int(*p)();
p=max;
c = (*p)(a, b);
printf("max=%d", c);
}
#endif
int max(int x, int y)
{
int max;
if (x > y)
{
max = x;
}
else
{
max = y;
}
return max;
}
#include <stdio.h>
void main()
{
int max(int x, int y);
int min(int x, int y);
int add(int x, int y);
void procss(int x, int y, int(*fun)());
int a, b;
scanf("%d %d", &a, &b);
printf("max:");
procss(a, b, max);
printf("min:");
procss(a, b, min);
printf("sum:");
procss(a, b, add);
}
void procss(int x, int y, int(*fun)())
{
int result = (*fun)(x, y);//int result = (*max)(x, y)
printf("%d\n", result);
}
int max(int x, int y)
{
int max;
if (x > y)
{
max = x;
}
else
{
max = y;
}
return max;
}
int min(int x, int y)
{
int min;
if (x < y)
{
min = x;
}
else
{
min = y;
}
return min;
}
int add(int x, int y)
{
int sum;
sum = x + y;
return sum;
}
//23 2
//max:23
//min : 2
//sum : 25
#include <stdio.h>
void main()
{
double score[][4] = {{79.5,89.5,99,67},{67,84,60,90.5},{77,79,97,87.5},{55,76,66,88}};
double* search(double(*pointer)[4], int n);
double* p;
int m;
scanf("%d", &m);
p = search(score, m);
for (int i = 0; i < 4; i++)
{
printf("%5.2f\t", *(p + i));
}
}
double* search(double(*pointer)[4], int n)
{
double* pt;
pt = *(pointer + n);
return pt;
}
#include<stdio.h>
void main()
{
double score[][4] = { {79.5,89.5,98,67},{67,52,50,90.5},{26,56,97,87.5},{55,76,66,88} };
double* search(double(*pointer)[4]);
double* p;
for (int i = 0; i < 4; i++)
{
p = search(score+i);
if (p == *(score + i))
{
for (int j = 0; j < 4; j++)
{
printf("%.2f ", *(p + j));
}
printf("\n");
}
}
}
double* search(double(*pointer)[4])
{
for (int i = 0; i < 4; i++)
{
if (*(*pointer + i) < 60)
{
return (*pointer);
}
}
}
//67.00 52.00 50.00 90.50
//26.00 56.00 97.00 87.50
//55.00 76.00 66.00 88.00
指针函数 -> int *p();
函数指针 -> int (*p)();
#include <stdio.h>
void main()
{
int a[5] = { 1,2,3,4,5 };
int* name[5] = {&a[0],&a[1], &a[2], &a[3], &a[4] };
for (int i = 0; i < 5; i++)
{
printf("%d ", *name[i]);
}
}
//1 2 3 4 5
#include <stdio.h>
#include <string.h>
void main()
{
char *str[] = {"I Love You","Shift","Love You","Thank You","Giao"};
void sort(char* name[], int n);
sort(str, 5);
for (int i = 0; i < 5; i++)
{
printf("%s\n", str[i]);
}
}
void sort(char* name[], int n)
{
int k;
char*temp;
for (int i = 0; i < 4; i++)
{
k = i;
for (int j = i + 1; j < 5; j++)
{
if (strcmp(name[k], name[j]) > 0)
{
k = j;
}
if (k != i)
{
temp = name[i];
name[i] = name[k];
name[k] = temp;
}
}
}
}
//Giao
//I Love You
//Love You
//Shift
//Thank You
#include <stdio.h>
void main()
{
char *str[] = {"I Love You","Shift","Love You","Thank You","Giao"};
char** p;
for (int i = 0; i < 5; i++)
{
p = str + i;
printf("%s\n", *p);
}
}
//I Love You
//Shift
//Love You
//Thank You
//Giao
第一
#include <stdio.h>
void main()
{
int max = 100;
printf("max=%d", max);
}
//max = 100
第二
#include <stdio.h>
void main()
{
int max = 100;
int* p;
p = &max;
printf("max=%d", *p);
}
//max = 100
第三
#include <stdio.h>
void main()
{
int a[] = {10,50,100};
int max=a[0];
for (int i = 0; i<3; i++)
{
if (max < a[i])
{
max = a[i];
}
}
printf("max=%d", max);
}
//max = 100
第四
#include <stdio.h>
void main()
{
int a[] = {10,50,100};
int max = a[0];
int* name[] = { &a[0],&a[1], &a[2]};
for (int i = 0; i < 3; i++)
{
if (max < *name[i])
{
max=*name[i];
}
}
printf("max=%d", max);
}
//max = 100
第五
#include <stdio.h>
void main()
{
int a[3][4] = { 0,1,2,3,4,5,6,7,8,9,10,11 };//二维数组
int(*p)[4];
p = a;//a==*a==a[0]==&a[0]==&a[0][0]
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
printf("%d ", *(*(p + i) + j));
}
printf("\n");
}
}
//0 1 2 3
//4 5 6 7
//8 9 10 11
第六
#include <stdio.h>
void main()
{
int a[] = {10,50,100};
int max(int a[]);
int b;
b = max(a);
printf("max=%d", b);
}
int max(int a[])
{
int result = a[0];
for (int i = 0; i < 3; i++)
{
if (result < a[i])
{
result = a[i];
}
}
return result;
}
//max = 100
第七
在这里插入代码片
第八
#include <stdio.h>
void main()
{
int max(int, int);
int a, b, c;
scanf("%d %d", &a, &b);
int(*p)();
p=max;
c = (*p)(a, b);
printf("max=%d", c);
}
int max(int x, int y)
{
int max;
if (x > y)
{
max = x;
}
else
{
max = y;
}
return max;
}
//20 100
//max = 100
第九
#include <stdio.h>
void main()
{
int* str[] = {10,20,100};
int** p;
int *max = str[0];
for (int i = 0; i < 3; i++)
{
p = str + i;
if (max <p )
{
max = p;
}
}
printf("max:%d", *max);
}
//max:100
p=array
#include <stdio.h>
void main()
{
int str[] = {10,20,100};
int* p;
p = str;//p=&str[0]
printf("%d", p);
}
p=max
#include<stdio.h>
void main()
{
int max(int, int);
int a, b, c;
scanf("%d %d", &a, &b);
int(*p)();
p=max;
c = (*p)(a, b);
printf("max=%d", c);
}
int max(int x, int y)
{
int max;
if (x > y)
{
max = x;
}
else
{
max = y;
}
return max;
}
#include <stdio.h>
void main()
{
int str[] = {10,20,100};
int *p1,*p2;
p1 = &str[0];
p2 = &str[2];
printf("%d", p2-p1);
}
//2