学习C语言有一阵子了,总结一哈指针的知识。没有技术术语,和繁杂的说明,以实例为证。快速了解指针特性.
指针是指向一块内存区域的,指针本身也在内存中占有内存空间.
示例:
main()
{
int i,*p; /*声明整型变量i 和 整型指针 p*/
/*将一个整型值赋给指针*/
i = 2;
*p = i ;
printf("%d/n",*p) ;
p = &i;
printf("%d/n",*p) ;
}
输出结果:
2
2
main()
{
char date[] = "abc",*p;
p = date; /*将p指向字符数组date的起始位置*/
int i;
for(i = 0 ; i < 3 ; i++)
printf("%c,",*(p+i)) ;
}
输出结果
a,b,c
main()
{
int date[][] = {{1,2,3},{4,5,6},{7,8,9},{10,11,12}},**p;
int i,l;
*p = date; /*指针指向数组起始位置地址*/
for(i = 0 ; i < 4 ; i++)
{
for(l = 0 ; l < 3 ; l++)
{
printf("%d," *((*p+l)+i)) ;
}
printf("/n");
}
}
输出结果
1,2,3
4,5,6
7,8,9
10,11,12,
/*数组指针 列数已指定,行数不确定*/
main()
{
int date[4][3]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}};
int (*aa)[3],i,l;
aa = date;
clrscr();
for(i = 0 ; i < 4 ; i++)
{
for(l = 0 ; l < 3 ;l++)
{
printf("%d,",*(*(aa+i) + l));
}
printf("/n");
}
getch();
}
输出结果
1,2,3
4,5,6
7,8,9
10,11,12,
/*指针数组 行数确定,列数不确定*/
main()
{
char *date[3] = {"aaa","bbb","cccc"} ;
int i,l;
for(i = 0 ; i < 3 ; i++)
{
printf("%s/n", date[i] );
}
}
输出结果:
aaa
bbb
ccc
/*指针函数 :该函数返回一个指针*/
int *aa();
main()
{
int *p
p = aa();
printf("%d",*p);
}
int *aa()
{
int *p;
*p = 123;
return p;
}
输出结果:
123
/*函数指针 :充许通过函数指针调用函数*/
void (*str)();
void a();
void b();
main()
{
str = &a;
(*str)() ;
str = &b;
(*str)();
}
void a()
{
printf("%s/n","aa");
}
void b()
{
printf("%s","bb") ;
}
输出结果:
aa
bb