c语言之指针的使用提高(1)

数组元素的指针变量的遍历。
例子

#include <stdio.h>
int main(int argc, const char *argv[])
{
    int arry[5] = {}; 
    int n = sizeof(arry)/sizeof(arry[0]);//获取元素个数
    int *p = NULL;
    //p = &arry[0];
    p = arry;//如果p = &arry,则代表着数组的首地址,此时若p+1则跳过整个数组 
    int i = 0;
    printf("请输入%d个数据\n",n);
    for(i = 0; i < n; i++)
    {   
    	//scanf("%d",&arry[i]);
    	//p代表的时第0个元素的地址
    	//p+i代表的是第i个元素的地址
        scanf("%d",p+i);
    }   

    for(i = 0; i < n; i++)
    {  
        	//printf("%d ",arry[i]); 
        printf("%d ",*(p+i));
    }   
    printf("\n");
    return 0;
}
~        

运行结果:
请输入5个数据
11 22 33 44 55 
11 22 33 44 55 

数组的【】和*()的关系:
例子:

#include <stdio.h>
int main(int argc, const char *argv[])
{
int arr[5] = {11,22,33,44,55};
int n = sizeof(arr)/sizeof(arr[0]);
int *p = NULL;

p = &arr[0];

printf("arr[1] = %d\n", arr[1]);
printf("arr[1] = %d\n", *(arr+1) );
printf("-----------------\n");
printf("arr[1] = %d\n", *(1+arr) );
printf("arr[1] = %d\n", 1[arr] );
printf("-----------------\n");
//总结: []就是 *()的缩写,
//[]左边的数 在+的左边,[]里面的数 在+的右边 然后整个表达式加()并且取*

//arr == &arr[0] == &*(arr+0) == arr+0 == arr
printf("arr[2] = %d\n", *(p+2));
printf("arr[2] = %d\n", p[2]);

//p+i == &arr[i] == &*(arr+i)==arr+i == p+i
return 0;
}
arr[1] = 22
arr[1] = 22
-----------------
arr[1] = 22
arr[1] = 22
-----------------
arr[2] = 33
arr[2] = 33

指向同一数组的两个元素的指针的关系
例子:

#include <stdio.h>
int main(int argc, const char *argv[])
{
int arr[5] = {10,20,30,40,50};
int *p1 = arr;
int *p2 = arr+3;
//1、指向同一数组的两个指针变量相减 返回的是相差元素的个数
printf("%d\n", p2-p1);//3

//2、[]里面 在特殊情况下可以为负数
int *p3 = arr+2;
printf("%d\n", p3[-1]);//20
printf("%d\n", p3[2]);//50

//3、指向同一数组的两个指针变量 可以判断大小(指针变量的位置)
//p1>p2 p1在p2的右边 p1 == p2 两指针指向同一处
if(p1 > p2)
{
printf("ok\n");
}
else
{
printf("no\n");
}
//4、指向同一数组的两个指针变量 不要相加
printf("%d\n", p1+p2);//无意义
return 0;
}
运行结果
3
20
50
no

上一篇:PAT 1008(数组循环右移问题)


下一篇:JAVA.9