社区
C语言
帖子详情
数组和指针的转换
Initiala
2009-12-02 03:28:11
比如定义了这样的一个数组:int a[m][n];那么在编译的时候表达式中的a是指怎么被转换成一个int **类型的指针的?要详细点的过程~~
...全文
800
17
打赏
收藏
数组和指针的转换
比如定义了这样的一个数组:int a[m][n];那么在编译的时候表达式中的a是指怎么被转换成一个int **类型的指针的?要详细点的过程~~
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ernst20020530
2009-12-04
打赏
举报
回复
int main(int argc, char* argv[])
{
int a[2][3]={{1,2,3},{4,5,6}},i,j;
//printf("%d\n",**a);
int **p=a;
printf("%d\n",**p);
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
printf("%d\t",*(*(a+i)+j));
}
printf("\n");
}
return 0;
}
這樣做,爲什麽我取p的值會出問題(**p),但是我直接用**a取值就沒問題
cansoft
2009-12-04
打赏
举报
回复
建议看看《C和指针》这本书,有专门讲到你这个问题的。
wanghao111,的正解!如果按一维数组来处理,Sizeof函数要注意。
kostion
2009-12-04
打赏
举报
回复
LZ发过同样的帖子了,怎么又发一次,没明白吗,回头好好看看上一个帖子的回复
z569362161
2009-12-04
打赏
举报
回复
a是首地址,地址也是指针
wanghao111
2009-12-04
打赏
举报
回复
[Quote=引用楼主 initiala 的回复:]
比如定义了这样的一个数组:int a[m][n];那么在编译的时候表达式中的a是指怎么被转换成一个int **类型的指针的?要详细点的过程~~
[/Quote]
不转换为int **,而是int (*p)[n],一个指向一维数组的指针
注:(*P)括号必须有
phpjspasp
2009-12-04
打赏
举报
回复
int b[10];
int *pb = b;
b的类型是int [10], b数组中每个元素的类型是int, 所以,b可以赋值给int *类型的变量。
int a[10][10];
int (*pa)[10] = a;
同理,a的类型就是 int [10][10],a数组中每个元素的类型是int [10],所以,a可以赋值给 int (*)[10]类型的变量。
编译的时候,a 是个符号,存在于符号表中。
从C语言的角度讲,int [10][10] 和 int ** 是完全不同的类型。
Apple_Demo
2009-12-03
打赏
举报
回复
[Quote=引用 5 楼 jackzhhuang 的回复:]
一般二维数组是通过一维数组实现的,直接强制转化为一个一维指针就可以。
[/Quote]
通过转化成一维数组实现。
bobommsky
2009-12-03
打赏
举报
回复
在二维数组A[m][n]中,实际上代表一个一维数组B[m],B[m]中的每个元素由n个元素组成,所以,A表示第0行0列的地址,即数组首地址。
A[i](i=0~m-1) 表示第i行第0列元素的地址。A[i]+j(j=0~n-1) 表示第i行第j列元素的地址。
因此,*(A[i]+j)就是A[i][j]。 又可以知道,A[i]与*(A+i)等价,故A[i][j]==*(*(A+i)+j)。
不知道你问的是不是这个意思?
liangyonglou
2009-12-03
打赏
举报
回复
编译将二维数组当成一维数组处理的,强制转化为一个一维指针
dbx12358
2009-12-03
打赏
举报
回复
你可以把每个行号的数组地址作为各列的数组首指针。
starix_cai
2009-12-03
打赏
举报
回复
楼上头像很赞。
二维数组int iarray[m][n]
指针iarray会转化为int* tmp[n]?
小梁_unique
2009-12-03
打赏
举报
回复
是转换为一位数组实现的:一维数组中的指针就简单了吧。
jackzhhuang
2009-12-02
打赏
举报
回复
一般二维数组是通过一维数组实现的,直接强制转化为一个一维指针就可以。
xiaoshun123
2009-12-02
打赏
举报
回复
这个帖子好像见过了???
james_hw
2009-12-02
打赏
举报
回复
[Quote=引用楼主 initiala 的回复:]
比如定义了这样的一个数组:int a[m][n];那么在编译的时候表达式中的a是指怎么被转换成一个int **类型的指针的?要详细点的过程~~
[/Quote]
帮你顶一下,我觉得编译器会在预编译某个过程中检验a的类型是否正确,但转换成汇编代码以后,a只是一个地址而已。因此不是像你所说的转换成int **类型。
bobo364
2009-12-02
打赏
举报
回复
肯定有个行号列号,先给行一个地址,行当中在分成列,每个列在有一个地址
bobo364
2009-12-02
打赏
举报
回复
编译器干嘛要转换数组成指针,编译时二维数组编译器是当成一位数组处理的
数组
与
指针
应用详解,区别
1。
数组
与
指针
区别; 2.
数组
&
指针
的相同点。 3.函数参数;
C语言用
指针
将字符串
数组
位置颠倒
C语言用
指针
将字符串
数组
位置颠倒,实现ABCDEFGHIJKLMNOPQRSTUVWXYZ
转换
成ZYXWVUTSRQPONNOPQRSTUVWXYZ
哈工大c语言课件11(1).ppt
哈工大c语言课件11(1).ppt
220个经典C语言源码
220个经典C语言源码 从简单到难的220来个经典C程序 第一部分 基础篇 001 第一个C程序 002 运行多个源文件 003 求整数之积 004 比较实数大小 005 字符的输出 006 显示变量所占字节数 007 自增/自减运算 008 数列求和 009 乘法口诀表 010 猜数字游戏 011 模拟ATM(自动柜员机)界面 012 用一维
数组
统计学生成绩 013 用二维
数组
实现矩阵转置 014 求解二维
数组
的最大/最小元素 015 利用
数组
求前n个质数 016 编制万年历 017 对
数组
元素排序 018 任意进制数的
转换
019 判断回文数 020 求
数组
前n元素之和 021 求解钢材切割的最佳订单 022 通过
指针
比较整数大小 023 指向
数组
的
指针
024 寻找指定元素的
指针
025 寻找相同元素的
指针
026 阿拉伯数字
转换
为罗马数字 027 字符替换 028 从键盘读入实数 029 字符行排版 030 字符排列 031 判断字符串是否回文 032 通讯录的输入输出 033 扑克牌的结构表示 034 用“结构”统计学生成绩 035 报数游戏 036 模拟社会关系 037 统计文件的字符数 038 同时显示两个文件的内容 039 简单的文本编辑器 040 文件的字数统计程序 041 学生成绩管理程序 。。。。 。。。。
数组
指针
和
指针
数组
首先,理解一下
数组
指针
和
指针
数组
这两个名词: “
数组
指针
”和“
指针
数组
”,只要在名词中间加上“的”字,就知道中心了——
数组
的
指针
:是一个
指针
,什么样的
指针
呢?指向
数组
的
指针
。
指针
的
数组
:是一个
数组
,什么样的
数组
呢?装着
指针
的
数组
。 然后,需要明确一个优先级顺序:()>[]>*,所以: (*p)[n]:根据优先级,先看括号内,则p是一个
指针
,这个
指针
指向一个一维
数组
,
数组
长...
C语言
70,026
社区成员
243,244
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章