1.数组指针
#include<stdio.h>#include<string.h>#include <stdlib.h>int main(void){ int a[10]; printf("%p\r\n", a); printf("%p\r\n", &a); printf("%p\r\n", &a[0]); printf("%p\r\n", &a[1]); system("pause"); return 0;}

#include<stdio.h>#include<string.h>#include <stdlib.h>int main(void){ int a[10] = {1,2,3,4,5,6,7,8,9}; int *p = a; //指向数组的指针 printf("a的地址是%p\r\n", a); printf("p的地址是%p\r\n", p); p++; printf("p++;\r\np的地址是%p\r\n", p); printf("%d\r\n", *p); system("pause"); //指针的初始化 int i = 1; int* p = &i; int *q;//现在不能直接赋值,还没有地址呢 q = &i; return 0;}
1.1数组的形参和数组的长度
#include<stdio.h>#include<string.h>#include <stdlib.h>void minmax(int a[], int len, int* max, int* min);int main(void){ int a[] = { 1,2,3,4,5,6,7,8,9,12,13,14,16,17,21,23,55}; int min, max; //数组的长度表示 sizeof(a) / sizeof(a[0]) printf("sizeof(a)=%d,sizeof(a[0])=%d\n", sizeof(a), sizeof(a[0])); minmax(a, sizeof(a) / sizeof(a[0]), &min, &max); printf("min=%d,max=%d\n", min, max); system("pause"); return 0;}void minmax(int a[], int len, int* min, int* max)//也可以写成 void minmax(int *a, int len, int* min, int* max)数组传入的就是指针//也就是int a[] == int * const a; a的地址是不可以被改变的{ int i; *min = *max = a[0]; for (i = 1; i < len; i++) { if (a[i] < *min) { *min = a[i]; } if (a[i] > *max) { *max = a[i]; } }}
2.动态分配空间
#include<stdio.h>#include<string.h>#include <stdlib.h>int main(void){ int number; int* a = NULL; scanf_s("%d", &number); a = (int *)malloc(number * sizeof(int)); printf("a=%d\n", sizeof(a)); free(a); a = NULL; //一个malloc一定对应一个free,并且之后再转换成空指针 printf("a=%p\n", a); system("pause"); return 0;}