Tag: 指针

在一个结构中的数组并填充他

目前我有一个研究项目,我和一个朋友真的不知道如何解决问题的一部分。 所以,这是一个C项目。 我有2个结构: struct Lib { char letter; int capacity; int size; char** words[200000]; }; typedef struct Lib Library; struct Program { char* loadedFileName[50]; FILE* f; Library* dictionary; int totalwords; }; typedef struct Program Program; 而这个function: void fillDicoFromFile(Program* startup){ rewind(startup->f); while(!feof(startup->f) && !ferror(startup->f)){ char* word = malloc(sizeof(char) * 30); fscanf(startup->f, “%s”, word); int indexLib = […]

C中的多重引用和解引用

有人可以解释我多重参考和解除引用背后的概念吗? 为什么以下程序将输出设为’h’? int main() { char *ptr = “hello”; printf(“%c\n”, *&*&*ptr); getchar(); return 0; } 而不是这个,而是产生’d’? int main() { char *ptr = “hello”; printf(“%c\n”, *&*&ptr); getchar(); return 0; } 我读到连续使用’*’和’&’相互抵消,但这个解释没有提供上述代码中产生的两个不同输出背后的原因?

如何在c中从引用中为二维数组赋值?

int max(int x,int y){ if(x>=y) return x; else return y; } int calci(int i,int j,int n,int *c){ int k,y,m; k=j; y = (n)/((2^i)*(2^j)); for(y=i;y>=0;y–){ for(k=j;k>=0;k–){ *(*(c+2)+k) = max(y,calci(i+1,k,n,c)+calci(i+2,k,n,c)+calci(i,k+1,n,c)); } for(y=0;y<=j+2;y++){ *(*(c+1)+y)=*(*(c+2)+y); *(*(c+0)+y)=*(*(c+1)+y); } } return *(*(c+2)+0); } int main(){ int i,j,n,z,x,y; printf("Enter the amount\n"); scanf("%d",&n); x=log(n)/log(2); y=log(n)/log(3); int arr[3][y+3]; for(i=0;i<=2;i++) for(j=0;j<=y;j++) arr[i][j+2]=0; z = calci(x,y,n,arr); […]

调用函数时char数组和char *数组之间的区别?

我想知道为什么这个代码与char tab[100]工作正常,但如果我使用char *tab不起作用? fgets函数将char*数组作为参数对吗? #include #include #include Int Palindrome(char* str, int i, int j); int main() { char tab[100]; printf(“Enter your string : \n”); fgets(tab, 100, stdin); int j = strlen(tab); printf(“%d\n”, Palindrome(tab, 0, j – 2)); return 0; } int Palindrome(char* str, int i, int j) { if (i >= j) { printf(“My word […]

将指针转换为浮点数或使用指针参数指向函数

我试图准确理解这行代码是什么,因为我正在学习C. int (*f) (float *) 我知道第一部分是指向名为f的int的指针,但第二部分是我不确定的。 这会被归类为指向名为f的int的指针,该指针被强制转换为指向浮点数的指针 要么 这是一个名为f的指针,指向带有指针参数的函数。 如果有人可以帮助并且可能解释为什么或两者之间的差异,因为我在理解这个概念时遇到一点麻烦,那将会很棒。 谢谢!

创建一个int数组,其大小基于NSArray的大小

我正在尝试根据运行时获得的大小创建并归零一个int数组: size = [gamePiece.availableMoves.moves count]; //debugger shows size = 1; int array[size]; //debugger shows this as int[0] ! memset(array, 0, size); indexes = array; size和indexes都是这个类的ivars: int size; int* indexes; 不过,我最终得到了一个0长度的数组。 如何使用[gamePiece.availableMoves.moves count]指示的大小创建它?

用C语言指点指针

我是C的新手,我正在编写一个非常基本的函数,它将整数指针作为参数。 在函数内部,必须创建一个浮点指针。 此函数必须将整数指针的值赋给float,然后返回float。 这是我目前的代码: float * function(const int *x) { float *p = (float*)x; return p; } 但是这会导致在运行时读取的错误:“free():无效指针:0x00007fffc0e6b734”。 我只想说,我很困惑。 您可以提供的任何见解将非常感谢!

传递给C函数的指针值不正确

我有一个错误,其中一个不正确的值作为参数传递给C程序中的函数。 它的工作方式是,我将一个指向typedef-ed数据结构的静态指针声明为全局变量。 有一个初始化函数,其中初始化了该变量。 此函数分配内存,初始化数据字段并返回指针。 像这样的东西: static my_type *my_ptr; … void init(void){ my_ptr = init_my_type(); } 函数init_my_type非常简单: void *init_my_type(void){ my_type *x = malloc(sizeof(my_type); x->arg1 = 0; … // more field initializations return x; } 后来我使用my_ptr作为另一个函数的参数: void do_stuff(void){ func(my_ptr); } 我遇到的问题是,当访问my_ptr指向的数据结构中的某些数据时,我会在func中my_ptr 。 当我运行调试器时,当我在init_my_type上中断时,我得到一个漂亮的hex值: (gdb) finish Value returned is $26 (void *) 0x79b6c0 稍后,在do_stuff函数中, my_ptr具有相同的hex值: (gdb) print my_ptr […]

如何为指针分配内存

#include #include #include #include struct date { int year; int month; int day; }; struct person{ char name[64]; struct date birthday; }; struct aop { int max; struct person **data; }; struct aop *create_aop(int max) { struct aop *new = malloc(sizeof(struct aop)); new->data = malloc(max*sizeof(struct person)); for (int i=0; idata[i] = NULL; } new->max = […]

基本C指针分配/释放

使用GNU的GSL库编写C代码,从未正式学习任何代码,快速基本问题。 纠正我,如果我错了,但是我理解它的方式,当我分配内存用于我的矩阵(使用内置的var = gsl_matrix_alloc(x,x) )并将它们存储在变量中时,我基本上是创建一个指针,它只是一些内存地址,如:x01234749162 它指向我的GSL矩阵的第一个指针/内存位置。 跟踪何时释放与指针相关联的结构的内存(同样,内置gsl_matrix_free(x,x,x) )是没有问题的,我知道我需要在重新分配结构的指针之前执行此操作,否则我创造了一个内存泄漏。 所以现在我的问题,再次,我知道这是基本的,但听到我 – 我无法在stackoverflow上找到一个特别直接的答案,主要是因为很多答案涉及C ++而不是C – 我怎么做释放指向结构本身的指针? 每个人都说“哦,只需将其设置为NULL”。 为什么会这样? 这只是将POINTS的内存地址更改为解除分配的结构。 这是否告诉MMU现在可以使用该内存位置? 例如,当我在XCode中调试程序时,gsl_matrix结构的所有属性都被成功释放; 一切都变成了这个随机hex字符的垃圾串,这就是自由存储应该做的事情。 但是,我仍然可以通过调试器看到变量名(指针)…即使我将变量设置为NULL。 我会解释这意味着我没有释放指针,我只是释放了结构并将其设置为x0000000(NULL)。 我做的一切都是正确的,这只是XCode的一个特性,还是我遗漏了一些基本的东西? 我意识到,如果结构被解除分配,单个指向结构的指针可能会被认为不是什么大问题,但它很重要。 这是一些试图说明我的想法的代码。 gsl_matrix* my_matrix; // create single memory address in memory, not pointing to anything yet my_matrix = gsl_matrix_alloc(5, 5); // allocates 25 memory spaces for the values that the pointer held […]