一、相关知识
1、数组名是数组首元素地址
2、数组名是常量,不允许修改,
int a[]={1,2,3,4,5}
a相当于int *const a,a没法修改
3、数组指针是一个指针,指向数组
4、指针数组是一个数组,里面存储指针
二、实例
1、通过指针获取数组成员
#include <stdio.h> int main() { int a[] = {1,2,3,4,5,6}; int* p = NULL;//声明一个空指针 p = &a[0];//去数组首地址 for (int i=0;i<sizeof(a)/sizeof(a[0]);i++) { printf("%d\n", *(p + i)); } system("pause"); return 0; }
2、不排序找第二大数值
#include <stdio.h> int main() { int a[] = {1,3,9,5,4}; int max = 0; //声明最大的数 int max2 = 0;//声明第二大的数 if (*(a+0)>*(a+1)) { max = *(a+0); max2 = *(a + 1); } else { max2 = *(a + 0); max = *(a + 1); } //从第三个成员开始找,如果找到比max大的,让max等于这个数,max2等于max int n = sizeof(a) / sizeof(a[0]); for (int i=2;i<n;i++) { //找到更大就替换 if (*(a + i) > max) { max2 = max; max = *(a + i); }else if (*(a+i)>max2 && *(a+i)<max)//找到第二大只替换max2 { max2 = *(a + i); } } printf("第二大的数是:%d", max2); system("pause"); return 0; }
运行结果:5
3、自写代码实现strcpy
#include <stdio.h> int main() { char s[] = "asdfa2wefas"; char d[100]; int i = 0; for (i=0;s[i]!='\0';i++) { d[i] = s[i]; } //最后加'\0' d[i] = 0; printf("%s\n",d); system("pause"); return 0; }
4、指针数组
#include <stdio.h> int main() { int a[] = { 1,2,3 }; int* p[3]; p[0] = a; p[1] = &a[1]; p[2] = a + 2; int n = sizeof(p) / sizeof(p[0]); for (int i=0;i<n;i++) { printf("p[%d] = %p\n", i,p[i]); } system("pause"); return 0; }
5、指针和数组的区别
char *p="aiyou";//aiyou是常量,不可以修改 char a[]="aiyou";//aiyou是数组成员,里面的元素可以修改 //a是首元素地址,首元素是int int a[10]; int *p=a; int *p=&a[0]; //b是首元素地址,首元素是char * char *b[10]; int **pp=b; int **pp=&b[0];