指针
-
指针是变量,值为另一个变量的地址
-
// 合法指针变量 int *ip = NULL; /* 一个整型的指针 */ double *dp = NULL; /* 一个 double 型的指针 */ float *fp = NULL; /* 一个浮点型的指针 */ char *ch = NULL; /* 一个字符型的指针 */
-
// 定义指针 int *point = NULL; int var = 20; point = &var; // var地址赋值point printf("*point = %d", *point); // 20
-
指针++
// 当前指针指向1000地址的32位(4字节)的整数 int *nowPoint = 1000; nowPoint++; // 之后 nowPoint === 1004
-
指针数组
int *ptr[MAX]; // 指针数组,其中每一个元素都是一个指针,可以接收地址 char *names[] = { "Zara Ali", "Hina Ali", "Nuha Ali", "Sara Ali", }; printf("Value of names[%d] = %s\n", i, names[i] ); //输出 Value of names[0] = Zara Ali
-
指向指针的指针
int var; int *ptr; int **pptr; ptr = &var; pptr = &ptr;
-
传递指针为函数形式参数
int sec; void getSeconds(int *ptr); // 函数声明 int main(){ getSeconds(&sec); } void getSeconds(int *ptr){ *ptr = time(NULL) // 当前时间赋值(不是地址)给ptr }
-
能接收指针作为参数的函数也能接收数组名为参数(因为数组名本身就是指向数组中第一个元素的指针)
能接受指针作为参数的函数,也能接受数组作为参数,如下所示: #include <stdio.h> /* 函数声明 */ double getAverage(int *arr, int size); int main () { /* 带有 5 个元素的整型数组 */ int balance[5] = {1000, 2, 3, 17, 50}; double avg; /* 传递一个指向数组的指针作为参数 */ avg = getAverage( balance, 5 ) ; /* 输出返回值 */ printf("Average value is: %f\n", avg ); return 0; } double getAverage(int *arr, int size) { int i, sum = 0; double avg; for (i = 0; i < size; ++i) { sum += arr[i]; } avg = (double)sum / size; return avg; }
-
从函数返回指针
1.声明返回值为指针的函数 int * myFunction(){ int r[] = {1,2,3} return r; // 数组名就是指向数组第一个元素的地址,就是一个指针变量 }
指针就是地址是指:指针变量中存储的是地址