指针概念
程序运行的数据存储于内存中,以唯一的地址编号标识存储,称为内存地址。指针变量是指的是存储了内存地址的变量。
指针声明
int *temp;
int *temp;中的temp是变量名,*temp这样代表的是temp所指向的值(*:指针运算符,取其指向的内容)
指针定义
int count = 5;
temp = &count; (&表示取变量的地址符)
不可以将变量直接赋值给指针,比如int *temp = 5;报错
指针类型
指向变量
前面的指针声明与定义已经说明
数组指针
数组名表示数组中首元素的地址。
如:int a[10]; 那么a表示首元素地址,即 int *p = a; 可以使用*(p + 1)表示数组的第二个元素的值
也可使用 *(a+1)表示第2个元素
指针支持++和--操作
如:
#include <stdio.h> int main() { int a[6] = {3, 15, 6, 89, 63, 23}; int *p = a; printf("%d\n", *(a+3)); printf("%d\n", *(p+2)); for (; p < (a+6); p++) { printf("num: %d\n", *p); } return 0; }
输出结果为:
89
6
num: 3
num: 15
num: 6
num: 89
num: 63
num: 23
多维数组:
int *p2 = &b[1][0];
printf("%d\n", *p2);
则p2指向的是指向的是b[1][0]的值
字符串与指针
char str[] = " I love China "; // char *str = " I love China "; printf("%s\n", str);
通过地址操作,直接操作字符串中的字符
指向函数
数据类型 ( * 指针变量名)(函数参数列表)
int max(int a, int b) { return a + b; } int (*p)(int, int); p = max; int res = (*p)(3, 4);
调用方式是(*指针变量名)(实参列表);
指向指针的指针
char * name[] = {"Follow me", "Basic", "Great Wall"}; char **p; int i; for (i = 0;i < 5;i++){ p = name + i; printf("%s\n", *p); }
数组中每一项存的是字符串数组指针,*p 取出来的为字符串的值
参考文章: