数组中某两元素的地址的差

我们知道C语言中定义的数组如:

int a[5] = {1,2,3,4,5};

数组名 a 代表的就是数组的首地址 即 &a[0] , 数组中第n个元素的地址 = a + (n-1)*sizeof(int) .

那么当我们定义如下两个指针:

int *p, *q;
p = &a[1];
q = &a[3];
并将数组中某两元素的地址分别赋给 p,q .显然 

p的物理地址为 a+sizeof(int) = a + 4 

q的物理地址为 a+3*sizeof(int) = a+12 

那么当我们输出:

printf("%d\n", a[q - p]);
将得到什么结果呢?运行结果如下图:


事实上,对于p和q的赋值语句还可以写成:

p = a + 1;
q = a + 3;
很显然的 a[q-p] 就表示a[2]了。但是这种两个指针的差也只有在同一数组中才能表示两元素的下标差。

倘若p,q指向的不是同一数组元素,即使它们所指向的地址在内存中的位置正好间隔一个数组元素,结果也是不确定的。








  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在MATLAB中删除数组中的某个元素,可以使用以下步骤: 1. 定义一个包含待删除元素的数组S。 2. 使用循环遍历数组S中的每个元素。 3. 将当前元素转换为数字数组,使用cell2mat()函数将单元格数组转换为普通数组。 4. 使用find()函数找到数组中为0的元素的索引。 5. 使用索引,将数组中的0元素删除。 6. 将更新后的数组赋值给原来的单元格数组S。 下面是一个示例代码,可以实现删除数组中的0元素: ``` function S = shanchu0(S) for i = 1:length(S) k = cell2mat(S(i)); k(find(k == 0)) = []; S{i} = k; end end ``` 在这个例子中,我们定义了一个函数`shanchu0()`,它接受一个单元格数组S作为输入,并对每个元素进行删除操作。你可以将你的数组存储在一个3x1的单元格数组S中,就像这样: ``` S = cell(3, 1); S(1) = {[1 0 3]}; S(2) = {[2 1 0]}; S(3) = {[2 0 0 4 8 9]}; ``` 然后,你可以调用`shanchu0()`函数,并将S作为参数传递给它。函数将在原始数组上进行修改,并删除所有的0元素。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* *2* [MATLAB删除元胞数组中的零元素](https://blog.csdn.net/weixin_49796410/article/details/127663136)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值