Tag: 数组

如何在C中声明指向字符数组的指针?

如何在C中声明指向字符数组的指针?

引用数组与数组指针的引用

void check(void* elemAddr){ char* word = *((char**)elemAddr); printf(“word is %s\n”,word); } int main(){ char array[10] = {‘j’,’o’,’h’,’n’}; char * bla = array; check(&bla); check(&array); } 输出: word is john RUN FINISHED; Segmentation fault; core dumped; 第一个工作,但第二个不工作。 我不明白为什么会这样。

我可以在C中创建一个Char指针数组吗?

我是C的新手,C中的事情与我学到的任何其他语言不同。 在我的作业中,我想创建一个指向一个字符数组的字符数组,但不是创建一个多维字符数组,我想我会有更多的控制并创建字符数组,并将每个字符放入索引中。原始字符数组: char keywords[10]; keywords[0] = “float”; 上面的例子是澄清一个简单的案例。 但我的问题是由于我一直在做的研究,我对某些事感到困惑。 通常这可以在其他语言中使用,但在C中它将是: char *keyword[10]; keywords[0] = “float”; 但是当我想通过函数发送它时,为什么这是必要的: void function(char **keyword); //function prototype 不只是传递数组指针就足够了吗?

C标准是否要求n个元素数组的大小是元素大小的n倍?

C标准是否要求n个元素数组的大小是元素大小的n倍,可以通过显式语句还是通过严格的逻辑推理来满足其要求? 例如, int (*x)[5] = malloc(5 * sizeof **x); 无法为五个int的数组请求足够的空间? C 2011 [N1570] 6.5.3.4 7显示了将数组中的元素数量计算为sizeof array / sizeof array[0] 。 但是,例子不是标准的规范部分(根据前言第8段)。 6.2.5 20表示数组类型描述了具有特定类型的连续分配的非空对象集,但对所需的总内存没有提及。 这只是一个语言律师问题; 实际的实现是无关紧要的。 (为了安抚那些想要具体示例的人,假设一个C实现需要对大型数组进行额外的内存管理,因此创建一个数组需要创建一些额外的数据来帮助管理内存。)

最后命名参数不是函数还是数组?

这个问题是关于vararg函数,以及省略号之前的最后一个命名参数: void f(Type paramN, …) { va_list ap; va_start(ap, paramN); va_end(ap); } 我正在阅读C标准,并发现va_start宏的以下限制: 参数parmN是函数定义中变量参数列表中最右边参数的标识符(恰好在……之前)。 如果使用寄存器存储类,函数或数组类型声明参数parmN,或者使用与应用默认参数提升后生成的类型不兼容的类型,则行为未定义。 我想知道为什么以下代码的行为未定义 void f(int paramN[], …) { va_list ap; va_start(ap, paramN); va_end(ap); } 以下内容并未定义 void f(int *paramN, …) { va_list ap; va_start(ap, paramN); va_end(ap); } 宏可以通过纯C代码实现。 但纯C代码无法确定paramN是否被声明为数组或指针。 在这两种情况下,参数的类型都被调整为指针。 function类型参数也是如此。 我想知道:这个限制的理由是什么? 当内部进行这些参数调整时,某些编译器是否存在实现此问题的问题? (C ++也说明了相同的未定义行为 – 所以我的问题是关于C ++的问题)。

使用C中另一个结构内的二维结构数组编码问题

我正在使用二维结构数组,这是另一个结构的一部分。 这不是我已经做了很多事情所以我遇到了问题。 在接近结束的“测试”for-loop之后,此函数最终失败。 它在出现故障之前正确打印出一行。 我的代码中将数据读入虚拟2-d结构数组的部分工作得很好,因此它必须是我的赋值数组才能成为另一个结构(imageStruct)的一部分。 任何帮助将不胜感激! /*the structure of each pixel*/ typedef struct { int R,G,B; }pixelStruct; /*data for each image*/ typedef struct { int height; int width; pixelStruct *arr; /*pointer to 2-d array of pixels*/ } imageStruct; imageStruct ReadImage(char * filename) { FILE *image=fopen(filename,”r”); imageStruct thisImage; /*get header data from image*/ /*make a 2-d […]

在C中查找字符串数组中的字符串数

char* names[]={“A”, “B”, “C”}; 有没有办法找到数组中的字符串数量。 例如,在这种情况下,它必须是3.请让我知道。 谢谢。

指向多维数组的指针数组

我有一些二维数组,如: int shape1[3][5] = {1,0,0, 1,0,0, 1,0,0, 1,0,0, 1,0,0}; int shape2[3][5] = {0,0,0, 0,0,0, 0,1,1, 1,1,0, 0,1,0}; 等等。 我如何制作一系列指针? 我尝试了以下,但它们不起作用( 警告:从不兼容的指针类型初始化 ): int *shapes[]= {&shape1,&shape2}; int *shapes[]= {shape1,shape2}; int **shapes[]= {&shape1,shape2}; 有帮助吗?

使用指定的初始值设定项初始化数组时的奇怪值

当我初始化数组时,除了values[3]之外,所有输出看起来都没问题。 由于某种原因, values[3]初始化为values[0]+values[5]输出非常大的数字。 我的猜测是,我试图在将values[0]+values[5]正确存储到内存之前进行分配,但如果有人能够解释这将是很好的。 int main (void) { int values[10] = { [0]=197,[2]=-100,[5]=350, [3]=values[0] + values[5], [9]= values[5]/10 }; int index; for (index=0; index<10; index++) printf("values[%i] = %i\n", index, values[index]); return 0; } 输出如下: values[0] = 197 values[1] = 0 values[2] = -100 values[3] = -1217411959 values[4] = 0 values[5] = 350 values[6] = 0 […]

如何查找arrays的项目长度/数量?

可能重复: 函数参数中的数组长度 我的数组大小为5.例如: arrCustId[5] 我怎么知道我的arrays中已存在多少个客户ID? 总之如何找到数组的长度?