我很困惑以下段落如何与其后面的代码匹配: 由于argv是指向指针数组的指针 ,因此我们可以操作指针而不是索引数组。 下一个变体基于递增argv,它是指向char的指针,而argc倒计时: #include /* echo command-line arguments; 2nd version */ main(int argc, char *argv[]) { while (–argc > 0) printf(“%s%s”, *++argv, (argc > 1) ? ” ” : “”); printf(“\n”); return 0; } 不是char *argv[]只是一个指针数组? 指向数组的指针不会写为char *(*argv[])或类似的东西吗? 作为旁注,通常我发现混合数组和指针的声明相当混乱,这是正常的吗?
我的问题与这个问题有关: c在struct中定义具有不同大小的数组 但是,我不想使用动态分配(嵌入式目标)。 问题回顾: 在C中 ,我希望有两个相同结构的版本,每个版本的静态数组大小不同。 两个结构都将通过指针参数由相同的函数使用。 typedef struct { short isLarge; //set 0 at initialization short array[SIZE_A]; //more arrays } doc_t; typedef struct { short isLarge; //set 1 at initialization short array[SIZE_B]; //more arrays } doc_large_t; void function( doc_t* document ) { if ( document->isLarge ) { //change document into doc_large_t* [1] } //common […]
我想通过C代码中的JNI层传递以下指针数组 char *result[MAXTEST][MAXRESPONSE] = { { “12”, “12”, “” }, { “8”, “3”, “” }, { “29”, “70”, “” }, { “5”, “2”, “” }, { “42”, “42”, “” } }; 在java代码中,我写了以下声明 public static native String[][] getResult(); 我很困惑如何将该数组通过JNI层传递给Java代码??? 以下是JNI层描述 JNIEXPORT jobjectArray JNICALL Java_com_example_CheckResult_getResult (JNIEnv *env, jclass thiz) { Confused over here ???? }
[ 原标题称为’sizeof function’。 ] 我尝试了这些,他们都工作: char * p; printf(“* p的大小是%d \ n”,sizeof(* p)); // result = 1 printf(“p的大小是%d \ n”,sizeof(p)); //结果= 4 printf(“p的大小是%d \ n”,sizeof(&p)); //结果= 4 我想知道为什么第一个printf是1,第二个和第三个是4? 那么sizeof可以实际采用什么参数呢?
一些指针算术有相当大的麻烦。 我想我得到了概念(指针变量指向内存地址,正常变量指向数据)但我相信我的问题是语法( *, &, (*), *(),等) 我想要做的是构建一个自定义结构的动态数组(即指向堆结构的指针数组),我的界面提供了两个方法,“ad_to_obj_array”(它将对象添加,而数组可以为null为空)和“obj_array_dustbin”(它只是处理数组,也处理内容,堆objs)。 前者呈现如下。 对象的细节并不重要(并且结构已经重命名)但是我对一般问题的解决方案如下,如果您能发现错误,我将不胜感激。 编译器抱怨无效的左值,我尝试将RHS上的指针中的地址分配给堆结构指针数组中的指针值: #define NUM_ELEM(x) (sizeof (x) / sizeof (*(x))) obj* add_to_obj_array(obj* new_obj, obj* array) { int number_of_elements = 0; if (array != NULL) { number_of_elements = NUM_ELEM(array); } obj* new_array = NULL; /* note: I am expecting sizeof(new_obj) to return the size of an obj* to go […]
我一直在阅读一些post,并注意到指针根据sizeof可以是不同的大小,具体取决于代码编译和运行的体系结构。 对我来说似乎足够合理(即:32位架构上的4字节指针,64位上的8字节,完全有意义)。 让我感到惊讶的一件事是,指针的大小可以根据它指向的数据类型而有所不同。 我原以为,在32位架构上,所有指针的大小都是4个字节,但事实certificate,函数指针的大小可能不同(即:大于我预期的大小)。 为什么这是C编程语言? 我找到了一篇文章解释了这个C ++,以及程序如何处理虚函数 ,但这似乎不适用于纯C.此外,似乎使用“远”和“近”指针是不再需要,所以我没有看到那些进入等式的人。 那么,在C中,什么理由,标准或文档描述了为什么不是所有指针在同一架构上都是相同的大小? 谢谢!
提到这个问题,特别是litb接受的答案 ,我想知道为什么gcc抱怨这个: void func(const int (*ip)[3]) { printf(“Value: %d\n”, ip[1][1]); } int main() { int i[3][3] = { {0, 1, 2} , {3, 4, 5}, {6, 7, 8} }; func(i); return 0; } 如果我消除了const ,编译器会保持静止。 我有什么误会吗? 我想确保func不修改我的数组。 编辑:如果我为我的矩阵定义数据类型,会发生同样的事情: typedef int Array[3][3]; void func(const Array *p) { printf(“Value: %d\n”, (*p)[1][1]); } int main() { Array a […]
我目前无法理解以下场景:我有一个多维数组的字符串,我想通过仅使用指针来解决它,但我总是在指针上使用数组注释时出现分段错误。 这只是一个示例代码我想在pthread中使用3D数组,所以我想通过结构作为指针传递它,但它只是不起作用,我想知道为什么? 我认为指针和数组在function上是等价的? 以下是示例代码: #include void func(unsigned char ***ptr); int main() { // Image of dimension 10 times 10 unsigned char image[10][10][3]; unsigned char ***ptr = image; memcpy(image[0][0], “\120\200\12”, 3); // This works as expected printf(“Test: %s”, image[0][0]); func(image); return 0; } void func(unsigned char ***ptr) { // But here I get a Segmentation Fault […]
当我编译以下程序时,我得到错误: gcc tester.c -o tester tester.c: In function ‘main’: tester.c:7:17: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘ptr_X’ tester.c:7:17: error: ‘ptr_X’ undeclared (first use in this function) tester.c:7:17: note: each undeclared identifier is reported only once for each function it appears in tester.c:10:17: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘ptr_Y’ […]
我找不到我的问题。 不断给我这些错误: “c:2:5: note: expected ‘int *’ but argument is of type ‘int'” “c:28:1: warning: passing argument 1 of ‘CountEvenNumbers’ makes pointer from integer without a cast [enabled by default]” 这是代码: 1 #include 2 int CountEvenNumbers(int numbers[], int length); 3 int main(void) 4 { 5 int length; 6 int X;int Z; int Y; int W; […]