IOS 学习之二指针
2017-02-16 22:08
134 查看
指针
....
数组指针
/* 是指向数组元素的指针,本质是一个指针。 作用: 使用数组指针间接访问数组的元素 定义: int *p; 初始化: int a[4]={1,2,3,4}; int *p = a;//定义了一个指针 p 指向了a这个数组的第一个元素。此时 p 就是一个数组指针 或 int *p = &a[0] */ int a[4]={1,2,3,4}; printf("&a[0] = %p\n",&a[0]); printf("&a[1] = %p\n",&a[1]); printf("&a[2] = %p\n",&a[2]); int *p = a; printf(" p = %p\n",p);//p指向了数组 a 的第一个元素 printf("p + 1 = %p\n",p+1);//p+1 表示偏移的下一个元素 printf("--------分割 1--------\n"); //通过数据指针取得内存中对应存储单元的内容 printf(" *(p+1) = %d\n",*(p+1)); printf(" *(a+1) = %d\n",*(a+1)); printf("--------分割 2--------\n"); //使用数组指针和使用数组名的区别 printf(" *p++ = %d\n",*p++); printf(" *p = %d\n",*p); p--; printf("--------分割 3--------\n"); //用数据指针遍历数组; for (int i = 0; i < 4; i++) { printf("%d\t",*(p+i));//未改变了 p 的指向 } printf("\n"); for (int i = 0; i < 4; i++) { printf("%d\t",*p++);//改变了 p 的指向 } printf("\n");
结果
&a[0] = 0x7fff5fbff740 &a[1] = 0x7fff5fbff744 &a[2] = 0x7fff5fbff748 p = 0x7fff5fbff740 p + 1 = 0x7fff5fbff744 --------分割 1-------- *(p+1) = 2 *(a+1) = 2 --------分割 2-------- *p++ = 1 *p = 2 --------分割 3-------- 1 2 3 4 1 2 3 4 Program ended with exit code: 0
使用指针逆序数组
int len=10; int a[]={1,2,3,4,5,6,7,8,9,10}; int *p=a; for (int i = 0; i<len/2; i++) { int t=*(p+i); *(p+i)= *(p+len-1-i) ; *(p+len-1-i)=t; } for (int i = 0; i<len; i++) { printf("%d\t",*(p+i)); }
指针数组
是一个有序的指针的集合,本质是一个数组。 指针数组的所有元素都必须是具有相同存储类型和指向相同数据类型的指针变量。 指针数组的一般形式:类型说明符 *数据名[数据长度]
int a;//int 变量 int *a;//int 类型的指针变量 int a[5];//int 类型的数组 int *p=a;//p 为数组指针 int *a[5];// int类型的指针数组,只能存放 int 类型的数据的地址
int a = 3, b = 4, c = 5; int *pa[3]={&a,&b,&c}; printf(" &a = %p\n",&a); printf("*pa = %p\n",*pa); printf(" pa = %p\n",pa); printf("pa[0] = %p\n",pa[0]); printf("&pa = %p\n",&pa); printf("----------\n"); //访问a b 的值 printf("*(&a) = %d\n",*(&a)); printf("a = %d\n",a); printf("**pa = %d\n",**pa); printf("**(pa+1) = %d\n",**(pa+1)); printf("*pa[0] = %d\n",*pa[0]); int d[2][2] = {1,2,3,4}; int *pd[2]={d[0],d[1]};//pd/pd[0]为 d[0]的地址,pd+1/pd[1]为 d[1]的地址 printf("**pd = %d\n",**pd); printf("**(pd+1)= %d\n",**(pd+1));
结果
&a = 0x7fff5fbff70c *pa = 0x7fff5fbff70c pa = 0x7fff5fbff740 pa[0] = 0x7fff5fbff70c &pa = 0x7fff5fbff740 ---------- *(&a) = 3 a = 3 **pa = 3 **(pa+1) = 4 *pa[0] = 3 **pd = 1 **(pd+1)= 3
指针变量之间的运算
注:只有指向同一数组的两个指针变量之间才能进行计算,否则无意义。int a[5]={1,2,3,4,5}; int *p =a ; int *p1=&a[1]; int *p2=&a[2]; /* 若两个指针变量相减的结果是 1 的绝对值,则是连续的。结果的正负性表明指针变量指向的地址的高低性。 若两个指针变量相减的结果是 0,则指向同一个地址。 */ printf(" p1 > p =%d\n",p1>p);//1 p1 处于高地址,p 位于低地址 printf(" p2 -p1 =%ld\n",p2-p1);//1 p2 p1 指向的地址是连续的
数据名访问二维数组
int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; //列指针 //此时的 a[0]==&a[0][0] a[0]+1 ==&a[0][1] a[0]+2==&a[0][2] printf("&a[0][1] = %p\n",&a[0][1]); printf("&a[0] +1 = %p\n",a[0]+1); printf("&a[0][2] = %p\n",&a[0][2]); printf("&a[0] +2 = %p\n",a[0]+2); printf("---------------\n"); //行指针 //a+1 第二行的首地址 //a+2 第三行的首地址 printf("a[1] = %p\n",a[1]); printf("a+1 = %p\n",a+1); //a+1 第二行第一个无素的地址 //*(a+1) == &a[1][0] printf("*(a+1) = %p\n",*(a+1)); printf("&a[1][0] = %p\n",&a[1][0]); printf("---------------\n"); //*(a[i]+j) 获取 a[i][j] //a[i] ==*(a+i) //*(*(a+i)+j)---->a[i][j] printf("*(a[1]+3) = %d\n",*(a[1]+3)); printf("*(*(a+1)+3) = %d\n", *(*(a+1)+3));
结果
&a[0][1] = 0x7fff5fbff724 &a[0] +1 = 0x7fff5fbff724 &a[0][2] = 0x7fff5fbff728 &a[0] +2 = 0x7fff5fbff728 --------------- a[1] = 0x7fff5fbff730 a+1 = 0x7fff5fbff730 *(a+1) = 0x7fff5fbff730 &a[1][0] = 0x7fff5fbff730 --------------- *(a[1]+3) = 15 *(*(a+1)+3) = 15
二维数组指针
/* 数组指针 是指向一维数组元素的指针。 二维数组指针 是指向二维数据元素的指针。 是行指针,用来指向二维数组的一行,存放的是首先的地址。 一般形式:数据类型 (*指针变量名)[二维数组列表长度]; */ int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; int (*p)[4]=a;//定义一个数组指针,指向二维数组a. //使用 for (int i =0; i<3; i++) { for (int j = 0; j<4; j++) { printf("%d\t",*(*(a+i)+j)); } printf("\n"); } printf("---------\n"); for (int i =0; i<3; i++) { for (int j = 0; j<4; j++) { printf("%d\t",*(*(a+i)+j)); } printf("\n"); }
结果
1 3 5 7 9 11 13 15 17 19 21 23 --------- 1 3 5 7 9 11 13 15 17 19 21 23
相关文章推荐
- 【IOS学习】之二、虚拟机MAC Lion 10.7 下问题集锦和xcode的安装
- 学习ios之二--NSString--NSNumber
- iOS基础学习之二:XCode6+iOS8真机调试教程
- ios开发-c语言之指针和数组以及指针和字符串的学习
- ios开发-c语言之指针的学习
- 【C Prime Plus】学习笔记,Chapter 10,数组和指针之二
- 黑马程序员--IOS学习笔记(指针、返回指针的函数、指向函数的指针)
- 【学习ios之路:C语言】②高级指针应用
- 【学习ios之路:C语言】①指针及其简单的应用
- 黑马程序员——零基础学习iOS开发——06 字符串、指针、指针和数组、指针和字符串、指针和函数
- iOS开发学习笔记 2-4 C语言部分 指针
- 奶爸业余单片机学习之:C语言基础——指针(指针变量)学习笔记之二
- C++学习笔记(第六章 指针的应用 字符串 引用 之二)
- IOS 开发学习三 指针
- iOS: 学习笔记, Swift与C指针交互(译)
- 【IOS学习】之二、虚拟机MAC Lion 10.7 下问题集锦和xcode的安装
- iOS开发学习笔记 2-9 C语言部分 内存分配函数 函数指针 指针函数 void*
- IOS学习---C语言基础学习7(指针)
- iOS开发学习笔记 2-9 C语言部分 内存分配函数 函数指针 指针函数 void*
- 黑马程序员--IOS入学学习--4-数组、字符串及指针