- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
int nrow=5,ncol=7,i,j;
float **ptr;
/*allocation*/
ptr=(float **) malloc(nrow*sizeof(float*));
ptr[0]=(float *) malloc(nrow*ncol*sizeof(float));
/*initialize*/
for (i=0;i<nrow;i++)
for (j=0;j<ncol;j++) ptr[i][j]=0.0;
我们知道在上面的例子中,行从0
开始到nrow-1
结束,列从0
开始到结束在 ncol-1
中。但是如何才能让行从-4
开始到nrow+3
结束,同时让列从-4
开始到结束? ncol+3
?
补充代码:
#include <stdio.h>
#include <stdlib.h>
float *vector(int nl, int nh){
/* allocate a float vector with subscript range v[nl..nh] and initializing
this vector, eg. vector[nl..nh]=0.0 */
float *v;
int i,NR_END=0;
v=(float *)malloc((size_t) ((nh-nl+1+NR_END)*sizeof(float)));
for (i=0;i<(nh-nl+1+NR_END);i++) v[i]=0.0;
return v-nl+NR_END;
}
int main(int argc, char *argv[])
{
int i,nrow=5, row1, row2;
float *v;
row1=-4;
row2=nrow+3;
v = vector(row1,row2);
for (i=-4;i<(nrow+4);i++) {
v[i]=(float)i;
printf("v[%d]=%f\n",i,v[i]);
}
exit(0);
}
如果我运行上面的代码,它会得到正确的答案:
v[-4]=-4.000000
v[-3]=-3.000000
v[-2]=-2.000000
v[-1]=-1.000000
v[0]=0.000000
v[1]=1.000000
v[2]=2.000000
v[3]=3.000000
v[4]=4.000000
v[5]=5.000000
v[6]=6.000000
v[7]=7.000000
v[8]=8.000000
最佳答案
严格来说,不能在数组开始之前或结束之后进行索引。但是,您可以使数组比您预期的更大,并将起始指针放在中间的某个位置:
int nrow = 5, ncol = 5, pre = 4, post = 4;
int i,j;
float **ptr;
ptr = malloc((nrow+pre+post)*sizeof(float*));
for (i=0;i<nrow+pre+post;i++)
ptr[i] = malloc((ncol+pre+post)*sizeof(float));
ptr[i] += pre; // move up start of column pointers
}
ptr += pre; // move up start of row pointer
/*initialize*/
for (i=0;i<nrow;i++) {
for (j=0;j<ncol;j++) {
ptr[i][j]=0.0;
}
}
请注意,列的分配是对每一列进行一次,而不是在第一列中成堆进行。按照您的方式,第一列之后的任何内容都不指向任何内容。
现在您可以安全地访问从 -4 到 max + 3 的索引。
清理:
ptr -= pre;
for (i=0;i<nrow+pre+post;i++)
ptr[i] -= pre;
free(ptr[i]);
}
free(ptr);
关于c - 指针下标从负值开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51389816/
是否可以创建一个可以使用显式参数标签调用的下标? struct MyType { subscript (label: Bool) -> String? { return nil
我正在尝试制作一个包含带有上标和/或下标的文本的超链接。我找到了两种方法来做到这一点,它们都很糟糕。 解决方案#1:使用 Typography.Variants .这为某些字体提供了极好的上标……。
在这里! 我想在 geom_bracket 中包含一个带下标的标签在 ggplot2 .我尝试了不同的方式,但没有人成功(评论中的尝试): library(ggplot2) ggplot(data =
我正在尝试让 graphviz 启动并工作,我迫切需要节点标签中的下标。不幸的是,通过浏览无数关于类似问题的帖子,我似乎适合所有建议的解决方案,但仍然不起作用。这是我的代码: digraph G{
抱歉格式问题,我从来没有真正在这样的论坛上发帖,所以我必须学习一下操作方法。 我的问题是:我正在编写一个模板类,我想通过多种 [] 运算符访问我的容器。我读了一些关于这个主题的内容,所以我已经能够重载
我知道我们可以像在 matplotlib 中生成单个下标 $r_i$ 会给我一个下标为“i”的r。 但我想生成一个包含 3 或 4 个字母的下标,例如 r_ijk 应该给我一个带有“ijk”作为下标的
this[5] 有什么作用?我是否调用了某种未定义的行为?关于: std::vector foo{this, this + 5u}; 这个有用吗?我想知道指针算法对 this 的影响是什么。这是一个测
我从 visual studio 得到了一些奇怪的行为,关于以下代码片段,错误列表显示了 E0349 的几个实例:没有运算符“[]”匹配这些操作数。 Intellisense 似乎暗示类型不匹配,但正
我想为我的数组类提供 PHP 样式的 push_back 功能: arrayT arr; arr[] = 10; // == std::vector::push_back() 和 arrayT::op
下标 (subscripts)可以定义在类(class)、结构体(structure)和枚举(enumeration)中,是访问集合(collection),列表(list)或序列(sequence)
我正在使用traindata训练svm。 (R中的e1071软件包)。以下是有关我的数据的信息。 > str(train) 'data.frame': 891 obs. of 10 variab
#include int main(){ int arr[7] = {0,1,2,3,4,3,2}; arr[0]++[arr]++[arr]++[arr]++[arr]++[arr]
如果我想以特定用户的身份调用主脚本文件中的另一个 shell 脚本,我该怎么做呢?子脚本似乎失去了它正在运行的用户的上下文,我还没有找到任何有用的子脚本技术。 例如:war-install.sh if
这个问题在这里已经有了答案: Why isn't there an operator[] for a std::list? (4 个答案) 关闭 5 年前。 我有这些类型定义: typedef pa
我在 NSUserdefaults 中获取字典的字符串时遇到问题,这是我的代码。我不知道似乎是什么问题: static func getItemInUserDefaultsDictionary(key
我正在尝试执行以下代码并收到错误 Could not find member 'subscript on Xcode6 var b:[[Float]] = [[1,2]] var i2 = 0 //
我尝试运行的代码: std::string genBlankName(std::vector &posts) { std::string baseName = "New Post ";
1 1 A_{3} 2 2 C_{2} 3 3 ^{5}C_{1} 我有一个这样的输入文件要绘制。第三列是该点上的标签( latex 格式)。我如何在绘图上显示这些标签,就像它们在 latex 编译后
我在这里搜索了一段时间,之前的问题/答案部分回答了我的问题。我正在学习 R,来自 Matlab。正如标题所说,我有一个关于情节注释的问题。在 Matlab 中,绘制包含各种数据格式的注释非常简单,我正
我想将一些化学数据放入表格的列中。但在现有表格中,下标显示为普通字符。其中一些显示为问号。我应该怎么做才能解决它? 当我输入这段代码时 SELECT N'H' + NCHAR(0x2082) + N
我是一名优秀的程序员,十分优秀!