您的位置:首页 > 编程语言 > C语言/C++

——黑马程序员——C语言中的指针(二)

2015-11-02 11:31 351 查看
-----------android培训java培训、java学习型技术博客、期待与您交流!-----------
指针与一维数组之间的关系

一、数组指针:指向数组首地址的指针

特点:
1、允许指针加一个整数,+1表示指针指向了数组当前元素相邻的下一个元素
2、允许指针减一个整数,-1表示指针指向了数组当前元素相邻的前一个元素
3、允许指针进行自增自减运算,如p++,++p、p--,--p
4、使用指针来循环遍历数组写法为 *(a+i)或者 *(p+i)a为数组名,p为指针,使用数组的下标来循环遍历数组,写法为:a[i]
5、当p1和p2都指向同一数组中的元素时,允许指针相减 ,值是数组地址的差值,可用于判断指针变量指向的元素是否连续,如果差值的绝对值为0则连续;
#include <stdio.h>
#include <stdlib.h>
int main()
{
//定义一个数组
int a[4] = {1,2,3,4};
//定义一个指针并指向数组的首地址
int *p = a; //也可以写成 int *p = &a[];
int i;
//打印出数组的每个元素
for(i = 0; i < 4; i++)
{
printf("a[%d] = %d\n",i,a[i]);
}
//打印出地址
printf("数组a的a[0]地址: = %p\n",&a[0]);
printf("  数组a的首地址: = %p\n",a);
printf("    指针p的地址: = %p\n",p);

system("pause");
return 0;
}



#include <stdio.h>
#include <stdlib.h>
int main()
{
//定义一个数组
int a[4] = {1,2,3,4};
//定义一个指针并指向数组的首地址
int *p = a; //也可以写成 int *p = &a[];
int i;
//打印出数组的每个元素
for(i = 0; i < 4; i++)
{
printf("a[%d] = %d\n",i,a[i]);
}
//打印出地址
printf("数组a的a[0]地址: = %p\n",&a[0]);
printf("  数组a的首地址: = %p\n",a);
printf("    指针p的地址: = %p\n",p);

//指针p加减一个整数测试
printf("让指针p加1之后为:%d\n",*p+2);
//指针p加减一个整数测试
printf("让指针p加1之后为:%d\n",*p);

int j;
//指针p自增自减
for(j = 0; j < 4; j++)

{
printf("a[%d] = %d\n",j,*p++);
}

system("pause");
return 0;
}



#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[5] = {1,2,3,4,5};
int *p = a; // 定义一个指针并指向a
//让p1指向数组的第四个元素
int *p1 = p+3;
printf("%d,%d\n",*p,*p1);
//指针之间的减法运算,值为地址的差值
printf("p1-p = %d\n",p1-p);

printf("p1-p = %d\n",p-p1);
system("pause");
return 0;
}



二、指针数组

指针数组:一个数组元素的值为指针则称为指针数组,指针数组是一组有序指针的集合。
一般形式:
类型说明符  * 数组名 [数组长度];例如:int *p [ 3 ] = {&a,&b,&c};
特点:p是数组的首地址,又是变量a的地址
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a = 3, b = 4, c = 5;
//定义一个指针数组
int *pa[3] = {&a,&b,&c};
//打印数组的第一个元素的值
printf("   &a = %p\n",&a);
printf(" pa[0]= %p\n",pa[0]);

//打印数组的首地址
printf("   pa = %p\n",pa);
printf("&pa[0]= %p\n",&pa[0]);

//打印出a的值
printf(" *(&a)= %d\n",*(&a));
printf("*pa[0]= %d\n",*(pa[0]));
system("pause");
return 0;
}



#include <stdio.h>
#include <stdlib.h>
int main()
{
int a = 3, b = 4, c = 5;
//定义一个指针数组
int *pa[3] = {&a,&b,&c};
//打印数组的第一个元素的值
printf("   &a = %p\n",&a);
printf(" pa[0]= %p\n",pa[0]);

//打印数组的首地址
printf("   pa = %p\n",pa);
printf("&pa[0]= %p\n",&pa[0]);

//打印出a的值
printf(" *(&a)= %d\n",*(&a));
printf("*pa[0]= %d\n",*(pa[0]));

//使用数组名访问a的值
printf(" a = %d\n",**pa);

system("pause");
return 0;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: