指针和数组:

 

#include<stdio.h>
/*
int main()
{
    int i = 0;
    int ages[5]={10,9,8,67,56};
    for(i = 0; i<5; i++){
        printf("%d\n", ages[i]);
    }
    return 0;
}
*/
//用指针访问每个数组元素
int main(){
    int *p;
    int ages[5]={10,9,8,67,56};
    p = &ages[0];//指针指向数组的首元素。//数组名就是数组的地址,也是数组首元素的地址 or p = ages
    // printf("%d\n", *p);这个时候说明指针指向了第一个元素地址,结果输出p指向元素的空间存储之就是0;

    // p+1,这个会跳到下一个元素的地址。
    printf("%p\n", *p);//&ages[0]
    printf("%p\n", *p+1);//&ages[1]
    printf("%p\n", *p+2);//&ages[2]

    //取出第三个元素的值
   // printf("%d\n",*(p+2));

   ////////////////////////////////////
   //数组的另外一种表达方式:
   printf("%d\n",p[2]);//指针可以替代数组,p[2]就等于ages[2].因为前面p=ages[2];
/*
数组元素的访问方式:
1. 数组名【下标】  ages[1]
2. 指针变量名【下标】   p【1】
3, *(p+i)

如何判断p+1,地址加上了多少取决于变量类型:
int main()
{

    double d = 10.9;
    double *dp;
    dp = &d;
    printf("dp = %p\n", dp);
    printf("dp + 1 = %p\n, dp+1);
}
*/
   int i ;
   for(i = 0 ; i<5; i++)
    {
       printf("ages[%d]=%d;\n", i, *(p+i) );

   }


{

    double d = 10.9;
    double *dp;
    dp = &d;
    printf("dp = %p\n", dp);
    printf("dp + 1 = %p\n", dp+1);

}

    return 0;
}

 

 

指针和数组密不可分:

#include <stdio.h>
void change(int array[]);

int main()
{
    int ages[5]={
        5,6,7,8,9
    };
    change(ages);
 
    return 0;
}
void change(int *array)//只能指向整型。 
{
    printf("%d\n", array[2]);//这种写法和下面的一样,指针和数组密不可分 
    printf("%d\n", *(array+2));//*array只能指向第一个数组元素 
}
/* 
void change(int array[])
{
    int s = sizeof(array);
    printf("%d\n", s);
}
*/

 

高级变化:指针里面带入函数,函数再变化。

#include <stdio.h>
void change(int array[]);

int main()
{
    int ages[5]={
        1,2,3,4,5, 
    };
    change(&ages[2]);//第二个元素地址传给指针 
 
    return 0;
}
void change(int *array)//只能指向整型。 
{
    printf("%d\n", array[2]);//=*(array+2) 
} 
//

 

posted @ 2015-03-09 15:52  稳稳稳稳稳稳  阅读(192)  评论(0编辑  收藏  举报