博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二维数组的存储
阅读量:2140 次
发布时间:2019-04-30

本文共 1119 字,大约阅读时间需要 3 分钟。

 二维数组的存储

以数组下标的方式来访问其中的某个元素:a[i][j]。编译器总是将二维数组看成是一个

一维数组,而一维数组的每一个元素又都是一个数组。

a[3]这个一维数组的三个元素分别为:

a[0],a[1],a[2]。每个元素的大小为 sizeof(a[0]),即 sizof(char)*4。由此可以计算出 a[0],a[1],a[2]
三个元素的首地址分别为& a[0],& a[0]+ 1*sizof(char)*4,& a[0]+ 2*sizof(char)*4
亦即 a[i]
的首地址为& a[0]+ i*sizof(char)*4。

a[i]里面的内容。就本例而言,a[i]内有 4个 char 类型的元素,其每个元素的首地址分别为&a[i],&a[i]+1*sizof(char),

&a[i]+2*sizof(char),&a[i]+3*sizof(char)

a[i][j]的首地址为&a[i]+j*sizof(char)

得到 a[i][j]元素的首地址为:a+ i*sizof(char)*4+ j*sizof(char)。同样,可以换算成以指针的形式表示:*(*(a+i)+j)

 

#include 
int main(int argc,char * argv[]){int a [3][2]={(0,1),(2,3),(4,5)};int *p;p=a [0];printf("%d",p[0]);}问打印出来的结果是多少?很多人都觉得这太简单了,很快就能把答案告诉我:0。不过很可惜,错了。答案应该是 1。如果你也认为是 0,那你实在应该好好看看这个题。花括号里面嵌套的是小括号,而不是花括号!这里是花括号里面嵌套了逗号表达式!其实这个赋值就相当于 int a [3][2]={ 1, 3,5};所以,在初始化二维数组的时候一定要注意,别不小心把应该用的花括号写成小括号了。
#include 
void main() { char s=(4,5,67 ); printf("%d\n",s); } // the end is 67 . !!!!
main(){int a[5][5];int (*p)[4];p = a;printf("a_ptr=%#p,p_ptr=%#p\n",&a[4][2],&p[4][2]);printf("%p,%d\n",&p[4][2] - &a[4][2],&p[4][2] - &a[4][2]);return 0;}//the end is :-4,    because :(4*4+2)-(4*5+2)

 

转载地址:http://sdtgf.baihongyu.com/

你可能感兴趣的文章
用 Pipeline 将训练集参数重复应用到测试集
查看>>
PCA 的数学原理和可视化效果
查看>>
机器学习中常用评估指标汇总
查看>>
什么是 ROC AUC
查看>>
Bagging 简述
查看>>
详解 Stacking 的 python 实现
查看>>
简述极大似然估计
查看>>
用线性判别分析 LDA 降维
查看>>
用 Doc2Vec 得到文档/段落/句子的向量表达
查看>>
使聊天机器人具有个性
查看>>
使聊天机器人的对话更有营养
查看>>
一个 tflearn 情感分析小例子
查看>>
attention 机制入门
查看>>
手把手用 IntelliJ IDEA 和 SBT 创建 scala 项目
查看>>
双向 LSTM
查看>>
GAN 的 keras 实现
查看>>
AI 在 marketing 上的应用
查看>>
Logistic regression 为什么用 sigmoid ?
查看>>
Logistic Regression 为什么用极大似然函数
查看>>
SVM 的核函数选择和调参
查看>>