二维数组 指针 形参 用一个关系图解决问题
2016-03-26 12:08
344 查看
int a[2][3] = { {1, 2} , {3, 4, 5} };//定义一个二维数组
void fun(int a[][3]) √ :我是个数组,我的每个元素都是含3个Int的数组
void fun(int (*a)[3]) √ :我是个指向数组的指针,我指向的那个数组含3个Int
void fun(int a[2][]) × 编译器:我不知道你每个元素的大小
void fun(int a[][]) ×
void fun(int* a[3]) × :我是一个Int* 类型的数组,我的每个元素都能指向一个Int
Int a[5] = {1,2,3,4,5};
int *p = a;
*(p + 2) 或 a[2] 就是3
再看看二维的:
int a[2][3] = { {1, 2} ,
{3, 4, 5} };
Int (*p)[5] = a; // 含有5个int元素的数组 的 指针
*(*(p + i) + j ) 或 a[i][j] 访问各int值
*(p + i) 或 a[i] 访问各行
举个例子帮助理解:
char a[2][10] = {"first","second"};
printf("%s", *a + 1);//输出irst
printf("%s", *(a+1) );//输出second
你也可以声明一个直接指向int的指针
方法一:int* p = &a[0][0]; //简单易懂,就是把int取址赋值给p
方法二:int* p = a[0];//参照最上面的关系图,a[0]就是a[0][0]的地址
#第一次写,可能许多地方写得不是很好(或许还有错的呢)欢迎指正。
二维数组作为参数传递给函数:
void fun(int a[2][3]) √ :我是一个有两个元素的数组,我的每个元素都是含3个Int的数组void fun(int a[][3]) √ :我是个数组,我的每个元素都是含3个Int的数组
void fun(int (*a)[3]) √ :我是个指向数组的指针,我指向的那个数组含3个Int
void fun(int a[2][]) × 编译器:我不知道你每个元素的大小
void fun(int a[][]) ×
void fun(int* a[3]) × :我是一个Int* 类型的数组,我的每个元素都能指向一个Int
二维数组的指针:
先看看一维的:Int a[5] = {1,2,3,4,5};
int *p = a;
*(p + 2) 或 a[2] 就是3
再看看二维的:
int a[2][3] = { {1, 2} ,
{3, 4, 5} };
Int (*p)[5] = a; // 含有5个int元素的数组 的 指针
*(*(p + i) + j ) 或 a[i][j] 访问各int值
*(p + i) 或 a[i] 访问各行
举个例子帮助理解:
char a[2][10] = {"first","second"};
printf("%s", *a + 1);//输出irst
printf("%s", *(a+1) );//输出second
你也可以声明一个直接指向int的指针
方法一:int* p = &a[0][0]; //简单易懂,就是把int取址赋值给p
方法二:int* p = a[0];//参照最上面的关系图,a[0]就是a[0][0]的地址
#第一次写,可能许多地方写得不是很好(或许还有错的呢)欢迎指正。
相关文章推荐
- 关于指针的一些事情
- Lua中使用二维数组实例
- C# Pointer指针应用实例简述
- C++智能指针实例详解
- C++指向函数的指针实例解析
- 关于c语言指针的两处小tip分享
- 浅析iterator与指针的区别
- 探讨C++中数组名与指针的用法比较分析
- C++编程指向成员的指针以及this指针的基本使用指南
- 详解C++中的指针、数组指针与函数指针
- C++中字符串以及数组和指针的互相使用讲解
- C语言安全之数组长度与指针实例解析
- C++中指向对象的常指针与指向常对象的指针详解
- 指向变量的常指针与指向常变量的指针详细解析
- C#使用二维数组模拟斗地主
- C#通过指针实现快速拷贝的方法
- C++形参与实参的区别实例解析
- php中将指针移动到数据集初始位置的实现代码[mysql_data_seek]
- C#二维数组基本用法实例
- C#通过指针读取文件的方法