C语言之指向数组的指针
来源:互联网 发布:ws848进入编程模式 编辑:程序博客网 时间:2024/05/17 08:53
C语言之指向数组的指针
int a[3],*p;
p=a;正确
int b[2][3],**q;
q=b;错误
初学c语言时总会这样声明一个指向二维数组的指针,按一维数组与一级指针的关系,二维数组与二级指针也应该有这样的关系呀,,,,,,,
怎么会错?
要解决这个问题首先让我们来研究下一维数组的数组名与一级指针的含义
int *p表示p是一个指向int类型的指针
int a[3] a是一个数组这个数组中存放的是3个int类型的元素即a是一个有3 个元素的int 类型的一维数组
在c语言中数组名就是数组的首地址,即a指向一维数组的第一个元素
而一维数组的第一个元素a[0]就是一个int类型的变量,而p正是一个指向int类型的指针
So,p=a right
下面让我们看下二维数组b与二级指针q
int **q表示q是一个指针这个指针指向一个int *类型的指针
int b[2][3] b是一个数组这个数组中存放的是2个有3个int元素的一维数组
b就是二维数组的首地址,指向二维数组的第一个元素,二维数组中的第一个元素是?
是int [3]是一个有三个int类型元素的一维数组
所以应该这样声明 int (*q)[3] q是一个指针这个指针指向一个数组这个数组有3个int类型的元素
这样q就是一个指向一个二维数组且第二维为三个int类型元素的指针了
就是说在声明一个指向数组的指针时,确保这个指针能指向数组的第一个元素就行了(把所有的数组当作一维数组来看待,不存在多维数组)
如果非要用多级指针指向一个多维数的话可以这样声明
如
int a[2][3] , **p
p=&a[0][0]
int a[2][3][4] , ***p
p=&a[0][0][0]
那如果数组是100维?
你是不是要写100个*,100个[0] ?
下面让我们来看下这个问题
int **p , (*q)[3], a[2][3]
q=a
p=q
q=p
void add(int **p)
add(q)
开动大脑分析下那个语句是正确的那个是错误的,、 and why ???
- C语言之指向数组的指针
- c语言之指针(指向数组元素的指针与指向数组的指针)
- C语言学习笔记之指向数组元素的指针和指向数组的指针
- C语言的指向数组的指针
- C语言指向多维数组的指针
- C语言指向多维数组的指针
- C语言指向多维数组的指针
- C语言指向多维数组的指针
- C语言数组指针(指向数组的指针)
- C语言数组指针(指向数组的指针)
- C语言数组指针(指向数组的指针)
- 93 C语言数组指针(指向数组的指针)
- C语言指针数组和指向指针的指针
- 黑马程序员--C语言--01-指针数组、指向数组的指针、指向指针的指针
- 黑马程序员04--C语言--01-指针数组、指向数组的指针、指向指针的指针
- C语言中二维数组、二维指针、指向指针的数组、指向数组的指针
- C语言数组名及指向数组指针的小结
- C语言 指针 详解 三 C语言数组指针(指向数组的指针)
- 精通Hibernate——数据库系统锁的基本原理
- 组织机构树型数据库结构
- CMD命令下,重复打印小问题。
- 格雷码递归实现(c++)
- uva11732(Trie)
- C语言之指向数组的指针
- 程序员练级之路
- 设计模式C++实现4——单例模式
- [leetcode] add two numbers(大数据加法链表版)
- 初学者初始化方法 便利构造器
- VIM 键盘图
- 如何使用SYSDBA执行EXP/IMP?
- iOS 打电话、发短信、写邮件、打开常用软件的几种方式
- Android权限标签uses-permission