Tag: 指针

在struct中访问数组元素时出错

我正在尝试编写一个“ArrayList”程序(类似于Java ArrayList ),它将使用realloc自动扩展,这样程序员就不必担心数组中的存储空间。 这是我的代码: #include #include #include #include #define ARR_DEFAULT_SIZE 20 #define INCR 10 #define ARRTYPE char // Files using this #undef this macro and provide their own type typedef struct { ARRTYPE *arr; long size; long nextincr; } arrlst; arrlst *nlst(void); void add(arrlst *, ARRTYPE); ARRTYPE elmat(arrlst *, long); int main(int argc, char **argv) […]

将整数列表解释为Python中的float

我试图将C代码段转换为python。 所述function的目的是从PLC获取4位,8位读数,并将它们解码为单个浮点数。 float conv_float_s7_pc(char * plc_real) { char tmp[4]; tmp[0] = * (plc_real + 3); tmp[1] = * (plc_real + 2); tmp[2] = * (plc_real + 1); tmp[3] = * (plc_real + 0); return (* (float *) tmp) ; } 是否有一些可以干净地执行此function的Python魔法? 虽然我试图转换上面的函数,但更普遍的问题是,你将如何在python中执行这样的内存“重新解释”? 编辑 这让我得到了我需要的东西: import struct def conv_to_float(plc): temp = struct.pack(“BBBB”, plc[0], plc[1], plc[2], plc[3]) […]

数组如何在结构中工作?

如果我有例如 typedef struct node { int numbers[5]; } node; 每当我创建这样一个结构的实例时,就会在堆栈中为数组本身分配内存(在我们的例子中为5个整数的20个字节(考虑整数为32位)),数字将成为指向该缓冲区的第一个字节。 所以,我认为,因为在节点的实例内部,将有一个20字节的缓冲区(对于5个int )和一个4字节的指针( numbers ), sizeof(node)应该是24个字节。 但是当我实际打印出来的时候说是20个字节。 为什么会这样? 为什么不考虑指向数组的指针? 我将非常感谢任何回应。

使用指针作为C调用Prolog进程的参数的奇怪情况

所以基本上我的测试是在32位x86 Linux上,我使用GNU Prolog 1.4.4 在这种情况下,我有函数ptr.c + pro.pl + interface.c 在ptr.c ,我使用包装器调用pro.pl的Prolog函数,然后在pro.pl ,我使用prolog c接口在interface.c中调用C函数,参数是C指针 。 我在这里为每个文件添加了一些代码: ptr.c : int C_wrapper_foo(int * e) { int return_value; int func; PlTerm arg[2]; // function variable + return value insert PlBool res; func = Pl_Find_Atom(“foo”); // function name insert Pl_Query_Begin(PL_FALSE); printf(“%p\n”, e); arg[0] = Pl_Mk_Integer((unsigned int)e); // See, here I […]

在指针指向指针链的末尾初始化值

好吧,我一直在这一天(不是hw)开始,虽然它可能不是一个特别有用的代码,但这是一个巧妙的概念。 我试图找出最后设置值的最佳方法,因为缺少更好的名称,指向指针链的指针。 例如,我声明: int *****ptr; 将每个指针设置为指针段的最佳方法是什么,一直到实际的int值? 此代码无法编译,因为它不喜欢我使用和取消引用void指针的方式: #include #include #define NUMPOINTERS 5 int main(int argc, char **argv) { int *****number; *****number = malloc(sizeof(void*)); void *ptr = *number; int i; for(i = 1; i < NUMPOINTERS; i++) { if(i == NUMPOINTERS – 1) { ptr = malloc(sizeof(int)); int *iPtr = (int*)ptr; *iPtr = 900; break; } […]

需要帮助来理解c中的指针和数组的代码

我需要了解注释行的作用吗? #include void fun(char**); int main() { char *argv[] = {“ab”, “cd”, “ef”, “gh”}; fun(argv); return 0; } void fun(char **p) { char *t; t = (p+= sizeof(int))[-1]; //what this line does? //[-1] does what? printf(“%s\n”, t); }

int * p =&a和q =&a之间有什么区别?

学习者的问题。 我可以用两种不同的方式声明和初始化指针 int a = 10; int *p = &a; 也 int a = 10; int *q; q = &a; 我想知道两者之间有什么区别,它在内存中是如何工作的?

通过任意大小的2维数组

嗨,我正在研究排序算法,因为我想制作一个简单的程序,从文本文件中获取整数数组。 在这样做的时候,我遇到了一些麻烦和关于数组和函数的问题,并将它们作为参数。 这是我做的: #include #include #define MAX_SIZE 64 #define MAX_INT_SIZE 10000 void itobuff(const char* istring,const int** sint); int getistring(FILE* file,char strbuffer[][MAX_SIZE],int max_int,int max); int main(int argc,char*argv[]){ char buffer[MAX_INT_SIZE][MAX_SIZE]; int int_counter=0; int int_buffer[MAX_INT_SIZE]; FILE *file = fopen(“MYFILE.txt”,”r”); getistring(file,buffer,MAX_INT_SIZE,MAX_SIZE); return 0; } 我的疑问是关于function的定义 int getistring(FILE* file,char strbuffer[][MAX_SIZE],int max_int,int max); 我想写一个允许使用任何大小数组的函数。 我知道这是错的,但从逻辑上讲,这是我想要实现的,但无法弄清楚如何。 int getistring(FILE* file,char strbuffer[][],int max_int,int max); […]

Python Ctypes传入指针并获得结构

这是我在解决实际有用问题之前尝试工作的一个简单示例。 C代码: typedef struct { uint32_t seconds; uint32_t nanoseconds; } geoTime; int myTest(geoTime *myTime){ printf(“Time: %d %d\n”, myTime->seconds, myTime->nanoseconds); myTime->seconds = myTime->nanoseconds; geoTime T = {314, 159}; printf(“MyTime: %d %d retValue: %d %d\n”, myTime->seconds, myTime->nanoseconds, T.seconds, T.nanoseconds); return 314; } Python代码: import ctypes import time import math lib_astro = ctypes.CDLL(“libastroC.so”) class geoTime(ctypes.Structure): _fields_ = [(“seconds”, […]

指向C中单个链表的指针

我有一个关于C中的符号链接列表的问题。我创建了一个链接列表,其代码如下所示: #include #include struct node { int data; struct node* next; }; struct node *mknode(int data) { struct node* np=malloc(sizeof(struct node)); np->data=data; np->next=NULL; return np; } struct node * insert (struct node* list,int data) { struct node *np; struct node*curr=list; struct node* prev=NULL; np=mknode(data); for(;curr &&datadata;curr=curr->next ) prev=curr; np->next=curr; if(prev) prev->next=np; else list=np; return list; […]