学点 C 语言(21): 数据类型 - 数组与指针(2)
5. 通过指针遍历数组:
#include
int main(void)
{
char str[] = "123456789";
char *p = str;
int i;
for (i = 0; i < sizeof str/sizeof str[0]; i++) {
printf("%cn", *p);
p++;
}
getchar();
return 0;
}
#include
int main(void)
{
char str[] = "123456789";
char *p = str;
while (*p != ') {
printf("%cn", *p);
p++;
}
getchar();
return 0;
}
#include
#include
int main(void)
{
char str[] = "123456789";
char *p = str;
int i;
for (i = 0; i < strlen(str); i++) {
printf("%cn", *(p+i));
}
getchar();
return 0;
}
#include
int main(void)
{
int nums[] = {111,222,333,444};
int *p = nums;
int i;
for (i = 0; i < sizeof nums / sizeof nums[0]; i++) {
printf("%dn", *p++);
}
getchar();
return 0;
}
6. 注意: 指针+1 是根据元素大小移动一个位置
#include
int main(void)
{
int nums[] = {111,222,333,444};
int *p = nums;
int i;
printf("%dn", *p);
printf("%dn", *(p+1));
printf("%dn", *p+1); /* 不是这样; 这是代表取值后再 + 1 */
getchar();
return 0;
}
7. 上面的指针其实都是数组元素的指针, 如何声明真正的数组指针呢?
#include
int main(void)
{
int nums[4] = {111,222,333,444};
int (*p)[4] = &nums; /* 注意其中的小括号 */
printf("%dn", (*p)[1]); /* 用起来并不方便 */
printf("%dn", (*p)[2]);
getchar();
return 0;
}





