Tag: 指针

C中指针变量的冲突类型(错误)

(1) #include #include int a = 10, b = 20 , c = 30, d, e, *pa, *pb, *pc; d= 10; e= 100; pa = &a; pb = &b; int main() { printf(“%i, %i, %i, %i”, pa, pb, d, e); return 0; } (2) #include #include int a = 10, b = 20 , c […]

获取Cython指针的值

我正在编写一个函数,构造一个malloc’d unsigned char *数组,然后返回指针。 在纯Cython或C中,这很容易。 您所要做的就是在函数上设置返回类型,并将指针返回到数组。 完成。 但是,我已经达到了一个点,我需要将一个指向Cython中创建的数组的指针返回给Python。 我知道指针只是内存地址。 有没有什么方法可以返回一个Python的Python指针作为python对象(如int或hex,因为内存地址本质上是一个数字),所以我可以基本上管理python中的指针? 我试图像这样返回指针的值: cdef unsigned char array[8] def return_pointer(): return &array 这当然不起作用,因为转换不能完成。 Cython抱怨Cannot convert ‘unsigned char (*)[8]’ to Python object 。 有什么建议? 编辑: 我不需要访问Python中指针引用的内存地址中的值,只需传递指针。 然后我计划使用Python对象指针,并用它作为参数调用c函数。

指针初始化为什么?

有一件事总让我困惑,角色指针。 经过四年多的努力,我再次陷入困境。 以上面提到的情况为例。为什么char指针以这种方式运行? 当指针指向什么都没有时,我们怎么能直接解决指针的内容呢?或者它就像char指针存储除地址之外的东西! #include #include int main() { char* charPtr=”I cant understand why”; int* intPtr=60; printf(“%d\n”, intPtr); //displays 60 printf(“%p\n”, intPtr); // displays the hex value of 60 printf(“%s\n”, charPtr); // displays the wh0le string printf(“%p\n”, charPtr); // displays the start address of the string return 0; } 接下来是int指针,它如何接受值60以及它存储在何处? 抛开char指针和malloc,我认为指针的基本思想是得到一个指向的地址! 为什么这些案件 *intptr = 60 […]

C中的以下声明有什么区别?

这两个声明之间的区别是什么: char (*ptr)[N]; 与 char ptr[][N]; 谢谢。

在C / C ++中编写“指向某事物的指针”的好方法

在C / C ++中编写“指向某事物的指针”是否有“好”的方法? 我用来写void foo( char *str ); 但有时我发现它非常不合逻辑,因为str的类型是“指向char的指针”,那么将*附加到类型名称应该更合乎逻辑。 写指针有规则吗? char*str; char* str; char *str; char * str;

全局变量和返回C函数中的多个可变长度数组(指针)

我有一些编程经验,但对C没什么用。 我有一个相当大的C文件。 在其中有多个函数按顺序执行 – 因此在这种特殊情况下,实际上没有函数被调用两次,它们被分解以便于阅读,因为每个函数仍然有一个单独的目的。 这个程序对几个长度可变的double数组进行了大量的计算,因此它们都是指针。 两个问题: 1)从开头计算一次然后作为许多后续函数的输入的变量 – 我应该在这个文件中使它们成为全局变量吗? 根据我在高级语言编程的经验,全局变量并不好。 这不是C的情况,为什么? 2)当我的函数中的一个想要返回多个指针(例如,每个指向一个长度为n的双数组)时,请说double * p1,double * p2,double * p3是相关的,我可以将它们组合成一个结构: struct pointers { double *p1, *p2, *p3; } ptr; foo1将输入double *作为输入,并计算ptr-> p1,ptr-> p2,ptr-> p3,然后ptr将作为foo2的输入。 我应该写吗? struct pointers *foo(double *input) 要么 void foo1(double *input, struct pointers ptr) 要么 void foo1(double *input, struct pointers *ptr) 为什么C函数通常是’void’函数,除非它只返回一个int或double变量? 输入和输出都作为参数 – […]

两个指针变量之间的差异

我在书面测试中问过这个问题。 在我的lapi上运行下面的代码时,我得到10作为输出 #include int main() { int *i, *j;/* two pointer variable*/ i = (int *)60; j = (int *)20; printf(“%d \n”,ij); return 0; } 输出: 10 任何人都可以告诉我为什么输出是10 。

大指针中的规范化是什么意思

我对理解“远”指针和“巨大”指针之间的区别有很多困惑,在谷歌搜索它的所有解决方案,找不到。 任何人都能解释我两者之间的区别。 此外,与巨大指针相关的精确归一化概念是什么。 请不要给我以下或任何类似的答案: “far指针和一个巨大的指针之间的唯一区别在于,一个巨大的指针由编译器规范化。规范化指针是一个在段中具有尽可能多的地址的指针,意味着偏移量永远不会大于15只有在对它进行指针运算时,才会对一个巨大的指针进行归一化。当进行赋值时,它不会被归一化。你可以使它被归一化,而不是通过递增然后递减它来改变它。偏移量必须小于16。因为该段可以表示任何大于或等于16的值(例如,标准化forms的绝对地址0x17将是0001:0001 。虽然远指针可以用0000:0017寻址绝对地址0x17 ,但这不是有效的(标准化)指针,因为偏移量大于0000F 。)。巨大的指针也可以使用算术运算符递增和递减,但由于它们被标准化,因此它们不会像远指针那样换行。 这里的规范化概念没有得到很好的解释,或者我可能无法理解它。 任何人都可以从初学者的角度尝试解释这个概念。 谢谢,Rahamath

将字符串从指针复制到字符串

我正在开发一些代码,它从SD卡中读取文件名(使用FatF)并将它们显示在屏幕上。 这是我工作的内容,它按预期打印出卡上的文件 – FRESULT result; char *path = ‘/’; //look in root of sd card result = f_opendir(&directory, path); //open directory if(result==FR_OK){ for(;;){ result = f_readdir(&directory, &fileInfo); //read directory if(result==FR_OK){ if(fileInfo.fname[0]==0){ //end of dir reached //LCD_UsrLog(“End of directory.\n”); break; } if(fileInfo.fname[0]==’.’)continue; //ignore ‘.’ files TCHAR *fn_ptr; //file name, why a pointer? fn_ptr=&fileInfo.fname; //get file name […]

*(a ++)给出错误但不是*(a + 1)?? 其中a是数组名称?

在以下代码中: void main() { char a[]={1,5,3,4,5,6}; printf(“%d\n”,*(a++)); //line gives error: wrong type argument to increment printf(“%d\n”,*(a+1)); } 第4行和第5行之间有什么区别。我没有收到第5行的任何错误或警告。