学习目标:
学习C语言指针的基本用法
(声明 ; 定义 ; 遍历访问)
学习内容:
- 指针
- 指针数组
- 数组指针
- 二维数组指针
学习内容:
1.指针
#include<stdio.h>
#include<stdlib.h>
int main()
{
printf("\n*1*\n");
{
//1.指针
int a = 1;
int b = 'a';
int *pa = &a;
int *pb = &b;
printf("%p\t%d\n",pa,*pa);
printf("%p\t%c\n",pb,*pb);
}
return 0;
}
2.指针数组
#include<stdio.h>
#include<stdlib.h>
int main()
{
printf("\n*2*\n");
{
//2.指针数组
int a[] = {1,2,3};
char b[] = {"abc"};
int *pa[3];
char *pb[3];
int i,j;
for(i=0;i<3;i++)
{
pa[i] = &a[i];
pb[i] = &b[i];
}
for(j=0;j<3;j++)//循环赋值法
{
printf("%d\t",*pa[j]);
}
printf("\n");
for(j=0;j<3;j++)
{
printf("%c\t",*pb[j]);
}
printf("\n");
}
return 0;
}
3.数组指针
#include<stdio.h>
#include<stdlib.h>
int main()
{
printf("\n*3*\n");
{
//3.数组指针
int a[] = {11,22,33};
char c[] = {'a','b','c'};
int (*pa)[3];
char (*pc)[3];
pa = a;
pc = c;
int i;
for(i=0;i<3;i++)
{
printf("%p : %d\n",(pa+i),*(*pa+i));
//方式一:注意有两次取值操作
}
for(i=0;i<3;i++)
{
printf("%p : %c\n",(pc+i),(*pc)[i]);//方式二
}
}
return 0;
}
4.二维数组指针
#include<stdio.h>
#include<stdlib.h>
int main()
{
printf("\n*4*\n");
{
//3.二维数组指针
int a[2][3] = {1,2,3,11,22,33};
char c[2][3] = {"abc","def"};
int (*pa)[3];
char (*pc)[3];
pa = a;
pc = c;
int i,j;
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
printf("%p : %d\t",(*(pa+i)+j),*(*(pa+i)+j));
}
printf("\n");
}
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
printf("%p : %c\t",(*(pc+i)+j),*(*(pc+i)+j));
}
printf("\n");
}
return 0;
}
/*本文代码输出
注:数据地址在不同的操作环境中的运行结果不同
*1*
000000000061FDD4 1
000000000061FDD0 a
*2*
1 2 3
a b c
*3*
000000000061FD74 : 11
000000000061FD80 : 22
000000000061FD8C : 33
000000000061FD71 : a
000000000061FD74 : b
000000000061FD77 : c
*4*
000000000061FD50 : 1 000000000061FD54 : 2 000000000061FD58 : 3
000000000061FD5C : 11 000000000061FD60 : 22 000000000061FD64 : 33
000000000061FD4A : a 000000000061FD4B : b 000000000061FD4C : c
000000000061FD4D : d 000000000061FD4E : e 000000000061FD4F : f
*/