2.1指针基本概念及其定义
所谓的指针就是一个用来指示一个内存地址的计算机语言的变量或中央处理器中的寄存器。指针一般出现在比较近机器语言的语言,如汇编语言或C语言中。一个指针是一个地址,是一个常量,而一个指针可以被赋予不同的指针值,是一个变量。为了便于两者区别,我们认为“指针”是指地址,“指针变量”是取值为地址的变量。
类型说明符*指针名=&变量名
*表示这是一个指针
&表示这是变量对应的内存地址
2.2指针类型的参数返回值
函数的参数大多数都是单向值传递,函数本身并不能改变实参的值,但是如果函数是指针,引用或者是数组的方式进行传递的话,那么就可以通过函数改变实参的值。例:
int *swap(int *px,int *py) { int temp; temp=*px; *px=*py; *py=temp; return px; } int _tmain(int argc, _TCHAR* argv[]) { int i=10,j=20; int *p=swap(&i,&j); printf("now i=%d j=%d *p=%d\n",i,j,*p); getchar(); return 0; }
2.2指向指针的指针与指针数组
一个数组
例:
int *a[5];
指向指针的指针:指针可以指向基本类型,同样也可以指向复合类型,因此也可以指向另外一个指针变量,称为指向指针的指针。
例:
int i; int * pi=&i; int **ppi=pi;
打印命令行参数
int _tmain(int argc, _TCHAR* argv[]) { int i; for(i=0;i<argc;i++) printf("argv[%d]=%s\n",i,argv[i]); return 0; }
2.3指向数组的指针与多维数组
例:
int a[10]; int (*pa)[10]=&a;
2.4函数类型和函数指针类型
在C语言中,函数也是一种函数,可以定义指向函数的指针。
指针变量的内存单元存在一个地址值,而函数指针存放的就是函数的入口地址(.text段)
例:
void say_hello(const char *str) { printf("Hello%s\n",str); } int main() { void(*f)(const char *)=say_hello; f("Guys"); getchar(); return 0; }