- 指针仅仅是指向计算机中的某个地址,并带有类型限定符。
- 你可以对一个指针使用数组的语法来访问指向的东西,也可以对数组的名字做指针的算数运算。
- 你应该每次尽可能使用数组,并且按需将指针用作提升性能的手段。
无论怎么样,你都不应该把指针和数组混为一谈。它们并不是相同的东西,即使C让你以一些相同的方法来使用它们
除了sizeof、&操作和声明之外,数组名称都会被编译器推导为指向其首个元素的指针。对于这些情况,不要用“是”这个词,而是要用“推导”。
#include <stdio.h> | |
int main(int argc, char *argv[]) | |
{ | |
int ages[] = {23, 43, 12, 89, 2}; | |
char *names[] = {"Alan", "Frank", "Mary", "John", "Lisa"}; | |
int count = sizeof(ages) / sizeof(int); | |
int i; | |
// 1. 最原始的方式:通过数组+下标访问 | |
for (i = 0; i < count; i++) | |
{ | |
printf("%s has %d years alive.\n", | |
names[i], | |
ages[i]); | |
} | |
printf("-------------------\n"); | |
int *cur_age = ages; | |
char **cur_name = names; | |
// 2. 通过对直接进行偏移访问元素 | |
for (i = 0; i < count; i++) | |
{ | |
printf("%s is %d years alive.\n", | |
*(cur_name + i), | |
*(cur_age + i)); | |
} | |
printf("-------------------\n"); | |
// 3. 把数组直接作为指针来访问 | |
for (i = 0; i < count; i++) | |
{ | |
printf("%s has %d years alive.\n", | |
cur_name[i], | |
cur_age[i]); | |
} | |
printf("-------------------\n"); | |
// 4. 通过对进行运算来访问 | |
for (cur_name = names, cur_age = ages; | |
(cur_age - ages) < count; | |
cur_age++, cur_name++) | |
{ | |
printf("%s is %d years alive.\n", | |
*cur_name, | |
*cur_age); | |
} | |
return 0; | |
} |