Tag: 数组

使用NULL数组将内存分配给2D数组(c)

感谢您花时间阅读本文。 在我的问题中,“向量”被定义为整数的一维数组。 因此,矢量arrays将是2D维arrays,其中每个矢量可以具有不同的长度。 我被要求使用: int ** vectors – 2D数组 int size -an整数,表示**向量中存在多少向量 int * sizes – 一个整数的1D数组,表示向量的长度 例如,对于: vectors = {{4,3,4,3},{11,22,33,44,55,66},NULL,{5},{3,33,333,33,3}}。 大小为5(向量内有5个向量)。 size是{4,6,0,1,5}(4是第一个向量的长度,依此类推)。 用户在main()的开头输入大小,**矢量&*大小用动态分配大小的值。 我被要求写这个函数: int init(int *** vectors,int ** sizes,int size),它将**向量初始化为NULL数组,将* sizes初始化为零数组。 我想出了这段代码: #define _CRT_SECURE_NO_WARNINGS #include #include int init(int*** vectors, int** sizes, int size) { int i, k,j; printf(“check\n”); *vectors = (int**)malloc(size * sizeof(int*)); […]

在C中使用char作为数组索引?

我有这个代码: int main(){ char vector[52]; char i; /* initialize the vector */ for (i =’a’; i < 'z'; i++){ vector[i] = i – 'a' + 1; } // vector is like vector['a'] = 1, vector['b'] = 2 .. vector['z'] = 26 for (i ='A'; i <= 'Z'; i++){ vector[i] = i – 'A' + 27; […]

指针下标从负值开始

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开始,以nrow-1结束。 但是我如何让行从-4开始并以nrow+3结束,也让列从-4开始并以nrow+3结束? 补充代码: #include #include 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; […]

使用getchar()获取多个值。

我可以以某种方式使用getchar()来运行命令行,直到我点击’\ n’。 假设我想要扫描我输入的所有值,例如。 21 23 1 78 54’\ n’。 我想将所有五个值扫描到一个数组中。 我无法扫描它们。是不是因为每个值之间的间距? 或者是否有我们可以使用的function? 提前致谢

C将char数组中的一个字符替换为另一个字符

我有以下C代码 #include int main(void){ char c[] = “ABC” printf(“%s “, c); c[1] = ‘B’; printf(“%s”, c); return 0; } 我想要的输出是ABC BBC但我得到的输出是ABC ABC 。 如何替换String / char数组中的第一个字符?

segfault with array

关于数组我有两个问题: 第一个是关于以下代码: int a[30]; //1 a[40]=1; //2 为什么不是第2行给出segfault,它应该给出因为数组只分配了30个int空间,并且在其分配的空间之外的任何解除引用应该给出段错误。 第二:假设上面的代码有效,那么[40]有可能越过写,因为它没有来自arrray的保留范围。 提前致谢。

二进制搜索字符数组?

我在理解如何使用字符串进行二进制搜索方面遇到了一些麻烦。 我输入的是命令行提示符中的一个句子,即argv [1],(argv [0]是我输出的可执行文件的名称)。 这就是它的样子: ./a.out “This is my sentence.” 并包含在我的文件中也是一个.h文件,它包含两个数组 – 一个包含某些名词集的名词数组和一个包含一组动词的动词数组。 我想要做的只是检查argv [1]中的动词和名词是否在名词或动词数组中,我想将它们打印出来。 但是,我很难理解如何解析句子中的每个单词,如上所示,并将它们与动词或名词数组进行比较,因为C中没有字符串(与C ++相反)。 任何人都可以提供算法/伪代码或如何这样做的想法? 如果是这样,将非常感谢!

C:将数组(指针)传递给函数

我有一个函数我想有一个函数来接收一个2D数组(H),读取一个指定的列(col)并将其传递给另一个数组(b)。 看来下面的代码不行,我期待得到1打印。 非常感谢任何指导。 #define nline 5 #define ncol 4 #include #include #include #include void count0(int **M,int col, int *a); void main(){ int i; int **H; H=(int**)malloc(nline*sizeof(int*)); for(i=0;i<nline;i++){ H[i]=(int*)malloc(ncol*sizeof(int)); } H[0][0]=8; H[0][1]=5; H[0][2]=6; H[0][3]=0; H[1][0]=7; H[1][1]=5; H[1][2]=4; H[1][3]=0; H[2][0]=5; H[2][1]=1; H[2][2]=1; H[2][3]=7; H[3][0]=0; H[3][1]=0; H[3][2]=0; H[3][3]=2; H[4][0]=1; H[4][1]=0; H[4][2]=1; H[4][3]=4; int *b; int col=1; count0(H,col,&b); printf("num […]

应该何时将数组名称视为指针,何时它只表示数组本身?

我刚读完这本书后做了一个测试程序,结果令人困惑: #include int main(void) { char text[] = “hello!”; printf(“sizeof(text):%d sizeof(text+2):%d sizeof(text[0]):%d \n”,(int)sizeof(text), sizeof(text+2), sizeof(text[0])); printf(“text:%p sizeof(text):%d &text:%p sizeof(&text):%d \n”,text, sizeof(text), &text, sizeof(&text)); printf(“text+1:%p &text+1:%p \n”, text+1, &text+1); return 0; } 结果: sizeof(text):7 sizeof(text+2):4 sizeof(text[0]):1 text:0xbfc8769d sizeof(text):7 &text:0xbfc8769d sizeof(&text):4 text+1:0xbfc8769e &text+1:0xbfc876a4 让我感到困惑的是: 为什么’sizeof(text)’的值是7而’sizeof(text + 2)’的值是4 ‘text’和’&text’之间有什么区别?

合并两个数组并省略所有重复元素

我有2个arrays。 输入1和输入2.假设输入1具有{1,1,2,3,3,4,5},输入2具有{4,2,6,7,8}。 合并数组{1,1,2,3,3,4,5,4,2,6,7,8} 排序后我的合并数组看起来像{1,1,2,2,3,3,4,4,5,6,7,8} 我的输出应该像{5,6,7,8},因为它们是非重复元素。 它应该既没有在第一次发生两次,也没有在第一次发生一次,在第二次发生一次 我已将两个数组放入一个单独的数组中(两者合并)。 对它进行排序并删除重复项。 我得到的输出像{1,2,3,4,5,6,7,8},但我不应该得到1,2,3,4,因为它们在合并的数组中都发生了两次。 请帮我尽快完成该计划。 提前致谢。 我不能使用结构。 多数民众赞成我的任务 #include #include main() { int a[10],b[10],c[10],i,j,n,n1,temp; clrscr(); printf(“enter the no of ele in array1\n”); scanf(“%d”,&n); printf(“enter 1st array elements\n”); for(i=0;i<n;i++) { scanf("%d",&a[i]); } printf("enter size of 2nd array"); scanf("%d",&n1); printf("enter 2nd array elements\n"); for(i=0;i<n;i++) { scanf("%d",&b[i]); } for(i=0;i<n;i++) { c[i]=a[i]; } j=0; […]