Tag: 指针

在C中分配2-Darrays

我想在运行时在C中分配一个二维数组。 现在这可以通过这样的传统方式实现: int *matrix[rows] for (row = 0; row < rows; ++row) { matrix[row] = (int *)malloc(ncol*sizeof(int)); } 但我找到了另一种方法,它做了同样的事情: int (*p)[rows]; p=(int (*)[rows])malloc(rows*cols*sizeof(int)); 谁能解释第二次宣言是如何运作的? 具体来说, (int (*)[rows])malloc是什么意思? 据我所知, malloc的使用类似于(int *)malloc(ncol*sizeof(int))或(char *)malloc(ncol*sizeof(char)) 。

使用指针声明的数组大小

char c[] = “Hello”; char *p = “Hello”; printf(“%i”, sizeof(c)); \\Prints 6 printf(“%i”, sizeof(p)); \\Prints 4 我的问题是: 为什么这些打印出不同的结果? 不是c[]也声明一个指向数组第一个字符的指针(因此它的大小应该是4,因为它是一个指针)?

如何qsort使用结构的指针数组?

我想按Id的顺序排列一系列指针。 但是由于我缺乏指针经验,qsort无法工作。 typedef struct block{ int Id; char * name; } block; typedef struct { block ** data; int size_array; } database; if( ( database = malloc(sizeof(database)) ) == NULL ) { printf(“Error: malloc failed\n”); exit(EXIT_FAILURE); } if( ( database->data = malloc( sizeof( block * ) * database->size_array ) ) == NULL ) { exit(EXIT_FAILURE); […]

有关C结构顺序的保证吗?

我已经广泛使用了结构,并且我看到了一些有趣的东西,特别是*value而不是value->first_value ,其中value是指向struct的指针, first_value是第一个成员, *value安全? 另请注意,由于对齐,无法保证大小,基于结构/寄存器大小的alginment值是什么? 我们将数据/代码对齐以便更快地执行,我们可以告诉编译器不要这样做吗? 那么也许我们可以保证结构的某些东西,比如尺寸? 当对结构成员进行指针运算以便定位成员偏移时,我认为你做了-如果对于大端的小端+ ,或者它只是依赖于编译器? malloc(0)真正分配了什么? 以下代码用于教育/发现目的,并不意味着具有生产质量。 #include #include int main() { printf(“sizeof(struct {}) == %lu;\n”, sizeof(struct {})); printf(“sizeof(struct {int a}) == %lu;\n”, sizeof(struct {int a;})); printf(“sizeof(struct {int a; double b;}) == %lu;\n”, sizeof(struct {int a; double b;})); printf(“sizeof(struct {char c; double a; double b;}) == %lu;\n”, sizeof(struct {char c; double […]

在函数调用的参数内定义新函数,数组,结构等

如果你有一个function,采取以下措施: void foo(char **arr); 你怎么能做到以下几点: void foo(char* x[] = { “hello”, “my”, “friend” }); 如果这让您感到困惑,那么在Java中我们通过以下方式做到这一点: public void foo(String[] x); foo(new String[] { “hello”, “my”, “friend” }); 目前,我在C中做了以下我讨厌,因为它看起来很丑: char* myArr[] = { “hello”, “my”, “friend” }; foo(myArr);

需要改变不同结构中的常见字段

对于Windows和各种Unix平台,我在这里用C编程。 我有一组具有共同字段的结构,但也有不同的字段。 例如: typedef struct { char street[10]; char city[10]; char lat[10]; char long[10]; } ADDR_A; typedef struct { char street[10]; char city[10]; char zip[10]; char country[10]; } ADDR_B; 它们显然不是那么简单,我实际上有6种不同的结构,但这是基本的想法。 我想要的是一个函数,我可以将指针传递给其中一个并能够更新公共字段。 就像是: static void updateFields( void *myStruct ) { strcpy( myStruct->street, streetFromSomethingElse ); strcpy( myStruct->city, cityFromSomethingElse ); } 显而易见,我在那里写的东西不起作用,因为void指针和某种类型的强制转换是有序的,但是没有一个很好的方法来强制转换(是吗?)。 我并不反对以某种方式指定结构类型的附加参数。 由于不相关的原因,我不能更改这些结构或将它们组合或用它们做任何其他事情。 我必须按原样使用它们。 一如既往,感谢您的帮助。 编辑:正如我在下面的评论中添加的那样,公共字段不保证全部在开头或全部在结尾或其他任何内容。 他们只是保证存在。

将多维数组传递给C中的函数

我有这样的function: void myfunc(int** arr, int n) { int i, j; for(i=0; i<n; ++i) { for(j=0; j<n; ++j) { printf("%d,", *(arr + i*n + j) ); // Print numbers with commas } printf("\n"); // Just breakline } } 在其他函数中,我有一个像这样的二维数组: int main() { int seqs[8][8] = { {0, 32, 36, 52, 48, 16, 20, 4}, {0, 16, […]

malloc内存到指针的指针

当使用指向char的指针时,我遇到了这个问题: void setmemory(char** p, int num) { *p=(char*)malloc(num); } void test(void) { char* str=NULL; setmemory(&str,100); strcpy(str,”hello”); printf(str); } int main() { test(); return 0; } 上面的代码是正确的,但我无法弄清楚为什么在这里使用指针char ** p的指针? 为什么只使用指向char的指针? 所以我把这个片段改成下面,发现它不起作用,有人能告诉我为什么吗? 谢谢! void setmemory(char* p, int num) { p=(char*)malloc(num); } void test(void) { char* str=NULL; setmemory(str,100); strcpy(str,”hello”); printf(str); } int main() { test(); return 0; }

C中的空函数指针是什么意思?

假设我们有一个函数指针: void (*func0)(void); 这也定义了: void func0(void) { printf( “0\n” ); } 但是说,在某些时候我们尝试以某种方式访问​​函数指针,然后如果MS VS调试器在我进入代码时显示func0实际指向0x0000,这是什么意思? 另外,还请告诉我什么是最好的解决方案? 谢谢。

将char指针数组传递给函数

我写了以下示例代码来演示我的问题 #include #include using namespace std; void f (char*** a) { *a = new (char*[2]); *a[0] = new char[10]; *a[1] = new char[10]; strcpy(*a[0], “abcd”); strcpy(*a[1],”efgh”); } int main () { char** b = NULL; f(&b); cout<<b[0]<<"\n"; cout<<b[1]<<"\n"; return 1; } 在这段代码中我发现a = new(char [2]); 不分配* a [1]的内存。 在gdb中我得到了以下seg错误。 Program received signal SIGSEGV, Segmentation fault. […]