——黑马程序员——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则连续;
一般形式:
类型说明符 * 数组名 [数组长度];例如:int *p [ 3 ] = {&a,&b,&c};
特点:p是数组的首地址,又是变量a的地址
指针与一维数组之间的关系
一、数组指针:指向数组首地址的指针
特点: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; }
相关文章推荐
- C语言第五章 语句
- C++11 多线程下生产者消费者模型详解
- 做c语言的码农专业发展方向
- C语言设计模式
- C++ 初始化列表
- 外部exe程序启动CAD并且自动加载CAD的ARX程序的过程
- OC语言中BOOL 和 bool 区别
- 《C++ primer》英文第五版阅读笔记(七)——定义自己的数据类型
- C语言第四章
- C语言程序如何优化
- 某国内知名自主研发游戏公司C++笔试题
- 数码视讯2015秋季校园招聘C++笔试题
- C++中int、double、float。string等常见类型转换
- C++语言基础内容
- C++中int 转string
- C++-IO库---istringtream(包含大小端测试)
- C++之旅<怎样让函数返回数组>
- 读u-boot深入学C语言框架 [2]
- 读u-boot深入学C语言框架 [1]
- [c]C语言小练习题