C语言基础-指针与数组
2015-11-11 18:05
239 查看
1.数组指针
概念:指向数组元素的指针
作用:使用数组指针间接访问数组的元素
定义:
初始化:
数组指针如何去访问数组元素:
p+1 表示指向数组的下一个元素
p-1 表示指向数组的上一个元素
一个数组元素的值是指针则是指针数组。指针数组是一组有序的指针的集合,指针数组的所有元素都必须是具有相同存储类型和指向相同数据类型的指针变量
3.两个指针变量之间的运算
1)两个指针变量之间的减法运算
注意:两个指针变量之间没有加法运算,也没有乘法和除法
2)两个指针变量之间的关系运算
4.数组名访问二维数组
概念:指向数组元素的指针
作用:使用数组指针间接访问数组的元素
定义:
int *p;
初始化:
int a[4] = {1,2,3,4}; int *q = a;//定义了一个指针变量q,赋值数组的首地址(第一个元素的地址),q指向了数组的第一个元素 int *q = &a[0];//跟上面等价
数组指针如何去访问数组元素:
p+1 表示指向数组的下一个元素
p-1 表示指向数组的上一个元素
/* 对于一个一维数组来说 int a[5]; 1)获取a[i]的地址有几种方法: 1.&a[i]; 2.a+i; 3.int *p = a; p+1; 2)获取a[i]的值有几种方法: 1.&a[i]; 2.*(a+i); 3.int *p = a; *(p+1); 4.*(&[i]); */ #include <stdio.h> void nixuArray(int a[],int len){ int *p = a;//定义数组指针 int i = 0,j = len - 1;//定义下标 int temp; while (i<j) { //交换a[i]和a[j] temp = *(p+i); *(p+i)=*(p+j); *(p+j)=temp; //修改下标 i++,j--; } } int main(int argc, const char * argv[]) { int arr[10]={1,2,3,4,5,6,7,8,9,10}; nixuArray(arr, 10);//逆序数组 for (int i=0; i<10; i++) { printf("%d\t",arr[i]); }//遍历数组 return 0; }2.指针数组
一个数组元素的值是指针则是指针数组。指针数组是一组有序的指针的集合,指针数组的所有元素都必须是具有相同存储类型和指向相同数据类型的指针变量
一般格式: 类型说明符 *数组名[数组长度] int *p[3];//p是一个指针数组,有3个数组元素,每个元素都是一个指针,指向整型变量 指针数组的使用: int a=3,b=4,c=5; int *p[3]={&a,&b,&c}; p[0] = a的地址
#include <stdio.h> int main(int argc, const char * argv[]) { int a=3,b=4,c=5; int *p[3]={&a,&b,&c}; //打印指针数组的第一个元素的值 printf("&a = %p\n",&a); printf("p[0] = %p\n",p[0]); //打印指针数组的首地址 printf("p = %p\n",p); printf("&p[0] = %p\n",&p[0]); //访问a的值 a=3 printf("*(&a) = %d\n",*(&a)); printf("*(p[0]) = %d\n",*(p[0])); //使用数组名来访问a的值 printf("**p = %d\n",**p); return 0; }
&a = 0x7fff5fbff7dc p[0] = 0x7fff5fbff7dc p = 0x7fff5fbff7f0 &p[0] = 0x7fff5fbff7f0 *(&a) = 3 *(p[0]) = 3 **p = 3
3.两个指针变量之间的运算
1)两个指针变量之间的减法运算
int a[4] = {1,2,3,4}; int *p1 = &a[0]; int *p2 = &a[3]; printf("p2-p1=%d\n",p2-p1); 运行结果:p2-p1=3 //如果两个指针指向同一个元素,相减的结果是 0 //如果两个指针指向相邻元素,相减的结果是 1的绝对值
注意:两个指针变量之间没有加法运算,也没有乘法和除法
2)两个指针变量之间的关系运算
<pre name="code" class="cpp"> int a[4] = {1,2,3,4}; int *p1 = &a[0]; int *p2 = &a[3]; printf("p2>p1 = %d\n",p2>p1);//1 表示p2在高位 //0 表示p1在高位或指向同一位置 运行结果:p2>p1 = 1
4.数组名访问二维数组
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); //行指针 //a[0] a[1] a[2] //a+1 第二行首地址 a+2第三行首地址 printf("a+1 = %p\n",a+1); printf("a[1] = %p\n",a[1]); printf("a+2 = %p\n",a+2); printf("a[2] = %p\n",a[2]);
运行结果:
<pre name="code" class="cpp"> &a[0][1]=0x7fff5fbff7c4 &a[0]+1 =0x7fff5fbff7c4 &a[0][2]=0x7fff5fbff7c8 &a[0]+2 =0x7fff5fbff7c8 a+1 = 0x7fff5fbff7d0 a[1] = 0x7fff5fbff7d0 a+2 = 0x7fff5fbff7e0 a[2] = 0x7fff5fbff7e0
相关文章推荐
- 关于指针的一些事情
- 如何写好 C main 函数
- ruby 数组使用教程
- Ruby中的数组和散列表的使用详解
- C#实现AddRange为数组添加多个元素的方法
- C#动态调整数组大小的方法
- Lua和C语言的交互详解
- 详解Lua中的数组概念知识
- Perl中的列表和数组学习笔记
- 探索PowerShell (八) 数组、哈希表(附:复制粘贴技巧)
- C#中数组初始化与数组元素复制的方法
- C#交错数组用法实例
- Linux Shell 数组建立及使用技巧
- PowerShell数组的一些操作技巧
- C#通过yield实现数组全排列的方法
- C#不重复输出一个数组中所有元素的方法
- C#实现将数组内元素打乱顺序的方法
- C# Pointer指针应用实例简述
- Ruby简明教程之数组和Hash介绍
- 关于C语言中参数的传值问题