指针是C语言的一个重要概念,也是最不容易掌握的内容,今天来学习一下C语言指针。
指针与数组
指向数组元素的指针
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| int main(int argc, const char * argv[]) { int q = 12; int *qPtr; qPtr = &q; printf("&q = %p\n", qPtr); printf("&qPtr = %p\n", &qPtr); int a[5] = {10, 20, 30, 40, 50}; int *aPtr, i; aPtr = a; for (i = 0; i < 5; i++) { printf("a[%d] = %d\n", i, a[i]); } for (i = 0; i < 5; i++) { printf("*(a+%d) = %d\n", i, *(a+i)); } for (i = 0; i < 5; i++) { printf("aPtr[%d] = %d\n", i, aPtr[i]); } for (i = 0; i < 5; i++) { printf("*(aPtr+%d) = %d\n", i, *(aPtr+i)); } return 0; }
|
在C语言中指针的应用十分灵活。
指针数组
1
| char *s[4] = {"C","Programming","Language","!"};
|
数组指针
1 2 3
| int (*p)[4];//括号不能省略。 int a[3][4] = {{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12}}; p = a;
|
p是一个指针,是指向一个数组的指针,数组有4个整型元素。a是一个二维数组,p指向了二维数组首元素的地址。*(p+1)+2表示&a[1][2],
指针函数与函数指针
指针函数是指函数的返回值是指针类型的函数。
1
| int *func(int a, int b);
|
函数指针
1 2
| int (*func)(int, int); //func是一个指针,指向函数的指针,该函数返回整型,并且有两个参数。
|
函数指针可以作为函数的参数,也可以定义函数指针数组。
在C语言中,函数的参数传递的方式一般有两种:传值和传地址。
结构体和联合体
联合体变量是可以作为函数的参数的,在有的教科书上说的是不可以,只能说C语言本身也是在不断完善的,一些知识要通过实践来验证。