一、
示例程序:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main() {
int a[5] = {1,2,3,4,5};
int *p = a;
int *p1 = a;
return 0;
}
程序调试:
二、
示例代码:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main() {
int a[5] = {1,2,3,4,5};
int *p = a;
int *p1 = a;
//方法1:输出数组的值 及地址
printf(" 数组a的值\t地址为:\n");
for (int i = 0; i < 5; i++) {
printf("\t%d\t%d\n",a[i],a+i);
}
//方法2:输出数组的值 及地址
printf(" 数组a的值\t地址为:\n");
for (int i = 0; i < 5; i++) {
printf("\t%d\t%d\n", p[i], p + i);
}
_getch();
return 0;
}
运行结果:
三、一维数组和指针中,以下四种方式一样:
四、指针数组
优先级:()>[]>*
[ ]和* 优先级:[]”的优先级比“*”要高
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main() {
//优先级: ()>[]>*
//指针数组 *p[]
float a[] = { 100,200,300,400,500 };
float *p[] = {&a[0],&a[1],&a[2],&a[3],&a[4]};
for (int i = 0; i < 5; i++) {
printf("%f ",*p[i]);
}
printf("\n");
_getch();
return 0;
}
运行结果:
五、二级指针
示例代码:
#include <stdio.h>
#include <stdlib.h>
int main() {
int i = 10;
int *p;
int **pp;
p = &i;
pp = &p;
printf("输出i的值:\n");
printf("i=%d\t%d\t%d\n",i,*p,**pp);
printf("p的值:%x\t%x\t%x\n",&i,p,*pp);
printf("pp的值:%x\t%x\n",&p,pp);
return 0;
}
运行结果:
六、指针作为函数参数:
数组名就是数组地址,因此,当数组名当作函数参数时,其实就是在执行地址传递;