Tag: 指针

C中的指针(将地址传递给函数)

我正试图解决这个问题。 问题是,*“swap_nums似乎有效,但不是swap_pointers。修复它。”*顺便说一下,我是初学者:) 我相信我可以自己解决这个问题,但问题是我在理解C中的一些编程概念时遇到了一些困难。这里我展示了需要编辑的给定代码。 到目前为止,我将展示我的思维过程。 请注意:我想要一些提示,而不是完整的解决方案。 🙂 #include #include void swap_nums(int *x, int *y); void swap_pointers (char *x, char *y); int main (int argc, char *argv[]){ int a = 3, b = 4; char *s1, *s2; swap_nums(&a, &b); printf(“a is %d\n”, a); printf(“b is %d\n”, b); s1 = “I should print second”; s2 = “I should […]

如何在C编译器内部处理数组和指针类型? (int * a;与int a ;)

我需要一位拥有权威资源的语言律师。 看看下面的测试程序,它在gcc下干净地编译: #include void foo(int *a) { a[98] = 0xFEADFACE; } void bar(int b[]) { *(b+498) = 0xFEADFACE; } int main(int argc, char **argv) { int a[100], b[500], *a_p; *(a+99) = 0xDEADBEEF; *(b+499) = *(a+99); foo(a); bar(b); printf(“a[98] == %X\na[99] == %X\n”, a[98], a[99]); printf(“b[498] == %X\nb[499] == %X\n”, b[498], b[499]); a_p = a+98; *a_p […]

无法连接strtok的输出变量。 strcat和strtok

我已经花了几个小时在这个程序上,并花了几个小时在线搜索我的方法的替代品,并在整个晚上一直困扰着崩溃和错误…… 我有一些我想用这段代码实现的东西。 首先,我将解释我的问题,然后我将发布代码,最后我将解释我对该程序的需求。 程序只输出单个单词,连接函数什么都不做。 这似乎应该足够简单来修复…… 我的第一个问题是我似乎无法使concatenate函数工作,我使用了通用的strcat函数,它没有工作,也没有我在互联网上找到的另一个版本(这个函数在这里使用,它被称为“mystrcat” )。 我希望用字符串读取程序并删除“分隔符”以创建由原始字符串中的每个单词组成的单个字符串。 我正在尝试使用strtok和strcat函数。 如果有一个更简单或更简单的方式请尽我所有的耳朵。 另一个问题,不一定是一个问题,而是一个丑陋的混乱:主要的七行。 我更喜欢按如下方式初始化变量:char variable [amt]; 但我发现strtok的代码是使用指针,而strcat函数的代码是使用指针。 更好地理解字符串的指针和地址可能会帮助我长期。 但是,我想以任何必要的方式摆脱其中的一些线索。 我不能只有2行专用于2个变量。 当我有10个变量时,我不想要30行顶部… #include #include #include char *mystrcat(char *output, char *firstptr); int main() { char str[] = “now # is the time for all # good men to come to the # aid of their country”; char delims[] = […]

交换结构数组中的元素

说我有这个结构: struct MyStruct { int iID; int iMyNumber; }; 然后我定义了一个MyStructs数组: struct MyStruct msTest[3]; 我正在通过查看ID对类似于此的结构进行排序操作。 现在,一旦我发现应该交换哪些记录来对数组进行排序,我就必须进行实际的交换。 我试过这个: if (iSmallest != iCntr) { stPTmp = &stXDB[iCntr]; &stXDB[iCntr] = &stXDB[iSmallest]; &stXDB[iSmallest] = &stPTmp; } stPTmp定义为void *stPTmp; 和iCntr和iSmallest包含要交换的记录的索引。 我的代码不起作用,但我该如何解决?

重新分配连续的2D数组

我使用Shawn Chin在这里发布的方法生成连续的2d数组。[1] [2] 它工作得很好。 简要地从他的post: char** allocate2Dchar(int count_x, int count_y) { int i; # allocate space for actual data char *data = malloc(sizeof(char) * count_x * count_y); # create array or pointers to first elem in each 2D row char **ptr_array = malloc(sizeof(char*) * count_x); for (i = 0; i < count_x; i++) { ptr_array[i] […]

如何将SWIG类型映射应用于双指针结构参数

我有一个API,我试图使用SWIG包装,以便我可以从python调用底层的C库。 我遇到了一个特定的API fn: int update_tracks(track_t **phash_tracks, const pdws_t *pdw_frame, const rdws_t *rdw_frame, lib_t *lib, lib_meta_t *lib_meta, const cfg_t *cfg); 它是track_t数据结构的双指针,我无法处理。 所有单指针都可以正常工作。 这是唯一具有指向track_t的双指针的API fn 所有其他只有一个指针,例如 void print_hash_tracks(const track_t *hash_tracks, const cfg_t *cfg, enum TRKTYPE trktype); 我很确定我需要在SWIG界面文件(interface.i)中创建一个类型图,但我发现SWIG文档难以理解。 我认为我需要做的是创建一个类型图,每当它看到track_t**类型时,它需要一个track_t*并将其转换为它的地址,如: /* provide typemap to handle instances of track_t** parameters */ %typemap(in) track_t** (track_t *tracks) { $1 = &tracks; } […]

struct function的不兼容返回类型 – C.

当我尝试按原样运行此代码时,我收到编译器消息“错误:返回不兼容的类型”。 我在代码中标记了错误的位置。 如果我把这条线拿出来,那么编译器很高兴。 问题是我想返回一个表示函数无效输入的值(在这种情况下调用f2(2)。)我只想要一个返回数据的结构,如果调用该函数而不使用2作为参数。 我觉得只有两种方法可以: 使函数返回一个结构指针而不是一个死对象结构但是我的调用函数看起来很有趣,因为我必须将yb更改为y-> b,并且由于在内存中获取数据的额外步骤,操作可能会更慢。 分配额外的内存,零字节填充它,并将返回值设置为内存中该位置的结构。 (例如: return x[nnn];而不是return x[0]; )。 这种方法将使用更多的内存和一些处理来零字节填充它。 最终,我正在寻找一种从长远来看最快,最干净(在代码方面)的解决方案。 如果我不得不坚持使用->来解决元素的成员,那么我想这就是要走的路。 有没有人有一个使用最少的CPU功率的解决方案? #include #include #include typedef struct{ long a; char b; }ab; static char dat[500]; ab f2(int set){ ab* x=(ab*)dat; if (set==2){return NULL;} if (set==1){ x->a=1; x->b=’1′; x++; x->a=2; x->b=’2′; x=(ab*)dat; } return x[0]; } int main(){ ab y; y=f2(1); […]

在C中,当作为参数传递给函数时,修改指向指针数组的指针的目标

我想要一个返回给定目录内容的函数。 为此,我使用dirent.h scandir 。 下面的代码成功编译(gcc -Wall test.c),但最后一个printf导致分段错误。 这意味着“eps”结构(指向指向结构的指针数组的指针)在函数后仍然是空的:我该如何解决这个问题? #include #include #include #include static int myselector(const struct dirent * dir_entry) { char * pch = strstr(dir_entry->d_name, “.”); return pch == NULL ? 1 : 0; } int list_dir(char * dirname, struct dirent ** eps) { int nbfiles = scandir(dirname, &eps, myselector, alphasort); if(nbfiles > 0) { […]

使用extern将数组与指针链接起来

假设我有两个文件:file1.c-包含一个名为“array [10]”的大小为10的int数组的全局定义。 file2.c-包含一个名为“extern int * array”的int指针,这里我试图将这个指针链接到数组。 但是当我检查file1.c中的数组地址和file2.c中的指针值时,它们都是不同的。 为什么会这样?

更改函数内部的指针不会反映在函数外部

void alloco(int *ppa) { int i; printf(“inside alloco %d\n”,ppa); ppa = (int *)malloc(20); ppa[15] = 9; printf(“size of a %d \n”, sizeof(ppa)); for(i=0;i<20;i++) printf("a[%d] = %d \n", i, ppa[i]); } int main() { int *app = NULL; int i; printf("inside main\n"); alloco(app); for(i=0;i<20;i++) printf("app[%d] = %d \n", i, app[i]); return(0); } 基本上我想做的就是将一个空指针从我的main传递给一个函数( alloco ),它分配内存/填充指针所指向的相同位置并返回。 我正确地获得了本地打印,这是在函数内部( […]