0. 指针和数组
- 通过
指针
保存
数组变量地址
int values[] = {1, 3, 5, 7, 9}; int *valuesP = values; printf("%p\n", values); printf("%p\n", &values); printf("%p\n", &values[0]); printf("%p\n", valuesP);
- 操作
- 通过
下标
操作元素int values[] = {1, 3, 5, 7, 9}; int *valuesP = values; printf("%i\n", valuesP[0]); valuesP[1] = 66; printf("%i\n", values[1]);
- 通过
地址
操作元素int values[] = {1, 3, 5, 7, 9}; int *valuesP = values; printf("%i\n", *valuesP); // 指针 + 1,其实是加上指针类型所占用的字节长度 *(valuesP + 1) = 66; printf("%i\n", values[1]); // 下标[指针变量] printf("%i\n", 4[valuesP]);
- 通过
1. 指针和字符串
- 通过
指针
保存
字符串
,本质就是保存字符串第0
个元素的地址
char *str = "wxx"; printf("%s\n", str);
- 特性
1. 通过数组保存字符串:字符串存储在 栈 中;字符串可以修改 char str[] = "wxx"; char strOne[] = "wxx"; printf("str = %p, strOne = %p\n", str, strOne); 2. 通过指针保存字符串:字符串存储在 常量区 中;字符串不可以修改 char *name = "qtt"; char *nameOne = "qtt"; printf("name = %p, nameOne = %p\n", name, nameOne);
2. 指针数组
- 定义:
数组元素
为地址
格式:指针类型 数组名称[元素个数] char *names[4] = { "wxx", "qtt", "xdy", "xfq" }; for (int i = 0; i < 4; i++) { printf("names[%i] = %s\n", i , names[i]); } int name[] = {1, 2, 3, 4}; int name1[] = {5, 6, 7, 8}; int name2[] = {9, 10, 11, 12}; int name3[] = {13, 14, 15, 16}; int *names[4] = { name, name1, name2, name3 }; printf("%i\n", names[3][3]);
网友评论