Tag: 指针

评估报表

//prog1.c #include int f(int *a,int *b,int c) { if(c == 0) return 1; else { *a = *a + 1; *b = *b – 1; c = c – 1; return (*a + f(a,b,c) + *b); } } int main() { int a = 3,b = 3,c = 3; printf(“%d\n”,f(&a,&b,c)); return 0; } 我使用gcc和clang-3.5执行程序,发现输出= 16 […]

结构和指针

我在将条目内存地址获取到结构的成员变量时遇到问题。 我试过两种方式,其中一种方法不能正常工作。 如果你们给我一些建议,那将是非常好的。 首先 ,我定义了一个名为BITMAP_HEADER的结构。 struct BITMAP_HEADER { WORD bfType ; DWORD bfSize ; WORD bfReserved1 ; WORD bfReserved2 ; DWORD bfOffBits ; } ; 其次 ,我定义并初始化了一些变量。 在阅读下一行之前,请先查看下面的代码。 如果你问我为什么我有一个字符指针,我需要访问整数bfSize的每个字节。 struct BITMAP_HEADER bitmap_header ; char* pSize = (char*)&bitmap_header.bfSize; 第三 ,我以两种不同的方式获得了bfSize的内存地址并打印了值 。 1. printf(“%X\n”, *pSize) ; 2. printf(“%X\n”, (unsigned char)*(((char*)&bitmap_header)+2)) ; (1)直接获取bitmap_header.bfSize的内存地址。 (2)得到一个存储器地址到结构BITMAP_HEADER并将指针移动到下一个2字节。 最后 ,结果如下。 2D F6 […]

赋值使得指针来自int w / out of cast

我正在为一个记忆斐波那契数字的程序编译一些代码。 该程序工作正常但是当我在linux环境中编译时,我在编译之前得到了这个警告。 line 61: warning: assignment makes pointer from integer without a cast [enabled by default] 以下是此警告来自的代码片段,我将尝试展示最相关的内容,以便了解最佳情况 int InitializeFunction(intStruct *p, int n) p->digits = (int)malloc(sizeof(int) * 1); if(p->digits == NULL) handleError(“Got error”); //making the one index in p->digits equal to n p->digits[0] = n; //incrementing a field of ‘p’ p->length++; //return 1 if successful return […]

如何使用指针在另一个函数内部分配一个数组

我是第二年的计算机工程师,还在学习C语言的过程。 我想通过使用函数而不是在main内部分配动态地分配数组。 这是我在main中分配数组时的代码。 #include #include #include #include #define ESC_KEY 27 #define NUM_1_KEY 49 #define NUM_2_KEY 50 void find_two_largest(int a[], int n, int *largest, int *second_largest); void arrayInit(int *,int *, int, int); void randGenArray(int [], int); void inputArray(int[], int); void result(int, int); void loading(void); int menu(void); int main(void) { system(“color f5”); int n,i,largest,largest_2, *a; arrayInit(a,&n, 2, […]

为什么我的BST根指针因某种未知原因而改变?

我试图在C中实现二进制搜索树数据结构,我遇到了一个bug。 我的指针值因我不明白的原因而改变。 (请参阅post底部的奇怪输出[删除function和主要function说明输出来自哪里])我的测试function如下: int main(void) { Bst *bst = ( Bst* ) calloc( 1, sizeof( Bst ) ); BstInsert( bst, 7 ); BstInsert( bst, 8 ); BstInsert( bst, 2 ); BstInsert( bst, 1 ); BstTraverse( bst ); BstRemove( bst, 7); printf(“=========================\n”); printf(“Root Key: %d\n”, bst->key ); printf(“Left Key: %d\n”, bst->left->key ); printf(“Right Key: %d\n”, bst->right->key […]

pthread编程中的共享数据

在pthread编程中我仍然不太确定。 如果有人能告诉我一个绝对的答案,我将不胜感激。 我之前的问题是: 如何在简单的Pthread编程中分配数组变量? 现在,我正在研究矩阵乘法。 它使用这个很好用: typedef struct { int rowIdx; int (*matA)[SIZE], (*matB)[SIZE], (*matC)[SIZE]; } newType; int main (){ int matriksA[SIZE][SIZE]; int matriksB[SIZE][SIZE]; int matriksC[SIZE][SIZE]; for (i=0;i<NUM_THREAD;i++) { (*block).rowIdx = i; (*block).matA = matriksA; (*block).matB = matriksB; (*block).matC = matriksC; pthread_create(&arrThread[i], NULL, matrixMul, (void *)block); block++; } } void *matrixMul(void *x){ newType *p = […]

在C中使用scanf进行解析

我是第一次学习C语言。 我有一个指向一个名为goalie_stat的字符串的指针(见下文)。 我如何使用scanf来解析保存百分比,即933,然后将933分配给变量然后最终打印出来? char *goalie_stat = “PatRoy 2.28 933 35 12 165 199 4 5500” char save_p = scanf(“%[13-15]”, goalie_stat); printf(“%s”, save_p); ‘933’是字符串的第13,14和15个字符,但我知道这是不正确的

在不知道大小的情况下打印数组

我有这个function: int printArray(int* arr, int size) { int i = 0; while (size–) { printf(“%d, “, *(arr + i++)); } return EXIT_SUCCESS; } 如何在不使用size参数的情况下打印数组? LE我试着这样做: int printArray(int* arr) { int i = 0; while (*(arr + i)) { printf(“%d, “, *(arr + i++)); } return EXIT_SUCCESS; } 但每个输出后跟三个未知值:( 在 :1 2 3 4; 输出 :1 […]

if(!ptr)VS if(ptr == NULL)in C

有时我看到程序员使用: void *ptr = ; if (ptr == NULL) ; 代替: void *ptr = ; if (!ptr) ; 有没有什么可以出错if (!ptr) ,还是仅仅是编码风格偏好?

C函数指针类型兼容性

编写一个与函数回调一起工作的库,我经常对具有相同调用约定和相同签名的类型进行类型化(和调用)函数指针,但有一个例外:它们具有指向不同类型(所有数据)的参数,或无效指针。 最近,我发现它可能不那么安全,根据这个: https : //stackoverflow.com/a/14044244/3079266 基本上,正如我所理解的那样,如果参数的类型是兼容的,那意味着函数指针类型也是兼容的,并且应该没有问题。 现在,我有3个问题。 第一:这是否意味着,由于指向不同类型的指针在技术上是不兼容的,我所做的可能导致未定义的行为? 第二:在哪里(在什么样的架构上)我可以逃脱它? 其中是Windows x86还是x64版本? 第三:我哪里可以逃脱它?