//
// main.c
// c指针
//
// Created by stevenchang on 9/4/15.
// Copyright (c) 2015 cz. All rights reserved.
//
#include <stdio.h>
void printfArray(int array[]); //声明一个函数,用于打印数组元素
int main(int argc, const char * argv[]) {
/**
1.指针与数组
只需要记得指针永远是指向地址的,不指向地址所在的存储空间。
只要通过指针得到地址,我们就可以改变指针的地址和通过地址来操作存储空间的值。
*/
int a[] = {2,3,4,5,6}; //初始化一个int类型的数组
int *p; //定义一个指针
p = a; //将指针p,指向数组a; 数组名就是数组的首地址
printf("%d\n",*p); //这里打印出来的值为2,即数组的首元素
printf("%d\n", *(p+1)); //通过指针p来获取数组a[1]中的值
printf("%d\n", p[1]); //通过指针p来获取数组a[1]中的值
printf("===========遍历=============\n");
//使用指针遍历数组
for (int i = 0; i < 5; i++) {
/**
指针变量p+1不是简单的数字相加,而是内存地址的相加
int *p;
p + 1 :地址值+4;
double *dp; dp + 2:地址值加2*8
因此,指针变量p+i,相加的值是根据i的数据类型(int/folat/double...)*i
*/
// printf("a[%d]=%d\n", i, *(p+i));
printf("%d\n",p[i]); //这也是一种指针的表达方式
}
//打印数组元素
printfArray(a);
return 0;
}
/**
用于打印数组元素
*/
void printfArray(int *array) {
//我们可以看到C语言中传递的数组,都将会被转成指针来进行传递,因此,sizeof(array)==8
//指针类型的sizeof()==8
//当参数类型改为int *array时,没有警告
printf("=====%zd\n",sizeof(array));
for (int i = 0; i < 5; i++) {
// printf("array[%d]=%d\n",i, *(array+i));
printf("array[%d]=%d\n",i , array[i]);
}
}
指针:永远指向的是一个地址,我们可以通过此地址来操控存储空间的值。
指针指向数组时,指向的是数组的首地址,通过首地址可以操作数组;
通过上面的例子,我们可以看到,当指针指向一个数组时,指针和数组是可以互换使用的。