Tag: 指针

如何使用气泡排序或选择排序按降序对指针数组中的数组进行排序?

我正在研究一个项目,它以几种不同的方式对指针数组中的数组进行排序,但我仍然坚持一种排序方式。 arrays的构建方式是第一个数字表示后面的数字量。 例如,(3,0,23,1):此数组在第一个索引后有3个数字)。 我想从最低到最高的数字对数组进行排序, 但我不想更改第一个索引,这意味着数组看起来像这样(3,0,1,23)。 这些是数组和指针数组: int arr1[] = { 3, 9, 6, 7 }; int arr2[] = { 2, 5, 5 }; int arr3[] = { 0 }; int arr4[] = { 1, 6 }; int arr5[] = { 4, 5, 6, 2, 1 }; int * pArr[SIZE] = { arr1, arr2, arr3, arr4, […]

为什么直接比较字符串失败,但成功使用char *

在以下工作代码中; 如果我直接使用比较,而不是使用*tofind if(*argv[i] == “and”) 它失败。 那为什么会这样? /** * Find index of the word “and” * ./a.out alice and bob */ int main(int argc, char **argv) { int i = 0; char *tofind = “and”; while (argv[i] != NULL) { if(*argv[i] == *tofind) { printf(“%d\n”, i + 1); break; } ++i; } return 0; }

size_t返回指针减法

我想rthe以下错误消息……错误:从’const char *’无效转换为’size_t’ return 0; } size_t strlen(const char *s1) { return s1 – 0; }

函数指针C中的结构

typedef struct Item{ int i; int j; void (*fooprint)(item*); }item; void fooprint(item *it){ printf(“%d\n”,it.i); } int main(){ item myitem; myitem.i=10; myitem.j=20; myitem.fooprint = fooprint; myitem.fooprint(&myitem); return 0; } 此代码在void( footprint)(item )中给出错误。 “错误是预期’)””’令牌”之前。 我错过了什么吗? 当我这样做而不使用指针结构是有效的。 示例:void(* footprint)(item)

搜索数组成员之间差异的函数

我需要编写一个函数,如果它找到了数组成员之间的差异,它将返回true。 我的代码是: int func1(int *str) { int i; for(i=0;i<*(str+i);i++) { if(*(str+i) == *(str+i+1)) { return 1; } } return 0; } 我必须用指针实现它。 上面的代码不起作用(逻辑上)。 有人可以帮忙吗? 更新: 我已将代码更改为以下内容: int func1(int *str) { int i,temp=0; for(i=0;i<10-1;i++) { if(*(str+i) == *(str+i+1)) { temp++; if( temp == 10 ) { return 1; } } } return 0; } 新代码有什么问题?

将C数组中的元素复制到不同的数组中

我正在完成一个循环缓冲区的工作,当它变满时需要加倍它。 但是,我无法弄清楚如何将元素从旧缓冲区复制到新缓冲区。 我的代码如下: #define startSize 10 #define fiveMin 300 cbuf* cbuf_init(){ cbuf *buffer = malloc(sizeof(cbuf) + 9 * sizeof(quote)); buffer->currSize = 0; buffer->maxSize = startSize; //buffer->startAt = 0; buffer->start = 0; buffer->end = 0; buffer->freeSlots = startSize; //buffer->currIndex = 0; return buffer; } void cbuf_update(cbuf *cb_ptr, unsigned int time, double rate){ if(cb_ptr->freeSlots == 0){ printf(“EXPANDING […]

为什么我不需要带扫描的&符号? (在C中)

void getnums(int *a, int *b); int main() { int a; int b; int c; getnums(&a,&b); c = a + b; printf(“a + b = %d\n”, c); return 0; } void getnums(int *a, int *b) { printf(“a:? “); scanf(“%d”, a); printf(“b:? “); scanf(“%d”, b); } 为什么我不需要在scanfs中的a和b之前使用&符号? (该代码目前有效。)

Cite / C ++中的SQLite。 sqlite3_exec:回调函数中的参数集指向空字符串

我正在尝试一些非常基本的东西 – 使用SQLite的C / C ++接口返回SELECT语句的结果。 我的数据表只有两个字段 – 键(varchar)和值(文本)。 鉴于密钥,我的目标是通过查询SQLite数据库来返回值。 我传递给* sqlite3_exec * – * select_callback *函数以及param (char *)。 param在* select_callback *中成功设置为正确的值。 但是,在调用* sqlite3_exec * param指向空字符串后(尽管指向相同的内存)。 知道出了什么问题以及如何解决这个问题? * sqlite3_exec *在幕后为param释放内存吗? 先感谢您! // given the key tid returns the value void getTypeByID(sqlite3 * db, string tid) { string sql_exp_base = “select value from Data where key=””; […]

C语言中字符串数组的动态分配

对于家庭工作,我需要定义一个将内存分配给字符串数组的函数(它是一个结构体)。 给出每个字符串的长度:MAX_WORD_LEN + 1(= 10 + 1)我必须为len个字符串分配内存, len在输入中接收。 具有字符串数组定义的struct(给定): struct dict{ int len; char (*dict0)[MAX_WORD_LEN+1]; char (*dict1)[MAX_WORD_LEN+1]; }; 我不明白声明char (*dict0)[MAX_WORD_LEN+1]; 函数声明也给出了: void createDict(struct dict * myDict); 这是我写的,但我不确定它是否有效,而且我很难在编译器中检查它。 我也根据这个和其他网站的post写了它,并没有真正理解它: 选项1: void createDict(struct dict* myDict) { myDict->(*dict0) = malloc( (myDict->len)*sizeof(char*)); myDict->(*dict1) = (char**) malloc( (myDict->len)*sizeof(char*)); for(int i=0;ilen);i++) { (myDict->(*dict0)[i]) = (char*)malloc((MAX_WORD_LEN+1)*sizeof(char)); (myDict->(*dict0)[i]) = (char*)malloc((MAX_WORD_LEN+1)*sizeof(char)); } } 方案2: […]

将JNA指针从一个Java应用程序发送到另一个Java应用程序

我有一个客户端和一个服务器应用程序。 客户端将String命令发送到服务器,该服务器使用JNA对两个DLL库接口进行相关调用。 当然,我会在某些时候需要在java方面使用Pointers。我无法通过套接字连接发送Pointer对象,因为它们不可序列化。 为了解决这个问题,我想我会使用Pointer.nativeValue(p)获取指针的原生长值,在连接上发送该长值并使用它在客户端创建新的指针。 但是,尽管客户端上的Pointer对象与服务器端的Pointer对象具有相同的本机值,但它并未指向客户端上的任何内容,并且出现Invalid Memory Access错误。 现在,在我的客户端应用程序中,我使用JavaFX创建一个窗口,我的DLL可以在其中绘制,因此我必须得到JavaFX窗口的HWND。 然后我做的是将JNA的HWND对象的本机值发送到服务器,然后服务器使用该长本机值重新创建HWND对象。 这样可行。 但很明显,Pointer和其他类似的JNA对象没有。 我认为这些Pointer对象和HWND对象(以及WinDef类中的其他对象)之间的区别在于HWND实际上是一个本机值,因为它来自Windows本身,否则它作为本机就没用了窗把手。 但我认为JNA Pointers仅存在于当前运行的JRE中。 因此,将指针值传递给另一个JRE(我的客户端正在运行)将无法正常工作。 我真的不是100%肯定这一点。 我只是C编程的初学者,所以我对指针知之甚少,更不用说java中的C指针了。 但是如果我对此有正确的想法并且进一步解释,请有人告诉我,特别是关于这些指针如何在java中工作。 这只是我所做的一个例子: // Server side (PointerTest class) public long getPtrVal() { Pointer p = new Memory(100); p.setString(0, “Test”); long ptrVal = Pointer.nativeValue(p); return ptrVal; // return value is processed in separate class } // Client side (MyClient sends […]