Tag: 指针

C中的指针与数组,非平凡差异

我以为我真的理解这一点,并重新阅读标准(ISO 9899:1990)只是证实了我明显错误的理解,所以现在我在这里问。 以下程序崩溃: #include #include typedef struct { int array[3]; } type1_t; typedef struct { int *ptr; } type2_t; type1_t my_test = { {1, 2, 3} }; int main(int argc, char *argv[]) { (void)argc; (void)argv; type1_t *type1_p = &my_test; type2_t *type2_p = (type2_t *) &my_test; printf(“offsetof(type1_t, array) = %lu\n”, offsetof(type1_t, array)); // 0 printf(“my_test.array[0] = […]

通过指针传递二维数组

如何将m矩阵传递给foo()? 如果我不被允许更改代码或foo()的原型? void foo(float **pm) { int i,j; for (i = 0; i < 4; i++) for (j = 0; j < 4; j++) printf("%f\n", pm[i][j]); } int main () { float m[4][4]; int i,j; for (i = 0; i < 4; i++) for (j = 0; j < 4; j++) m[i][j] = i+j; foo(???m???); […]

正确的格式说明符打印指针或地址?

我应该使用哪种格式说明符来打印变量的地址? 下面很多我很困惑。 %u – 无符号整数 %x – hex值 %p – 无效指针 哪个是打印地址的最佳格式?

将数组和矩阵传递给函数作为指针和指向C中的指针

给出以下代码: void foo( int* array ) { // … } void bar( int** matrix ) { // … } int main( void ) { int array[ 10 ]; int matrix[ 10 ][ 10 ]; foo( array ); bar( matrix ); return 0; } 我不明白为什么我会收到这个警告: 警告:从不兼容的指针类型传递’bar’的参数1 虽然’foo’电话似乎没问题。 谢谢 :)

什么是函数指针,我将如何使用它们?

我知道我可以使用指针来实现function。 有人可以解释为什么会使用它们,以及如何使用它们? 简短的示例代码对我很有帮助。

为什么我不能像C中的指针一样处理数组?

我在SO上看到了很多这个问题。 也许没有那么多的话……但是一次又一次地存在关于数组如何与指针不同的混淆。 所以我想我会花一点时间来问这个问题。 出于本Q&A的目的,我们将假设一个32位系统,并且已声明以下内容: char * ptr = “hello”; char arr[10] = “hello”; int iarr[10] = {0}; 这是一个问题列表,可以推测我在SO上看到的混乱。 当我看到新的问题时,我会添加到我的问答清单中(其他人也可以随意使用,如果您发现任何错误,请纠正我!) 指针和数组不是基本相同的东西吗? 跟进: *(ptr)和*(arr) ,或ptr[0]和arr[0]给出相同的东西,为什么? 为什么arr和&arr的价值相同? 跟进:为什么我得到一个不同的值打印arr+1 vs &arr+1 ?

内存中的字符串文字是什么? 堆栈/堆?

可能重复: C字符串文字:它们去哪儿了? 我所知道的, 通常,指针必须由malloc()分配,并将分配给堆,然后由free()取消分配; 和 非指针(int,char,float等)将自动分配给堆栈,并且只要函数返回就不会分配 但是,从以下代码: #include int main() { char *a; a = “tesaja”; return 0; } 分配到哪里? 堆栈还是堆?

C:printf中的ptrdiff_t应该使用哪个字符?

printf ptrdiff_t应该使用哪个字符? C标准是否清楚地解释了如何在printf打印ptrdiff_t ? 我还没找到任何人。 int a = 1; int b = 2; int* pa = &a; int* pb = &b; ptrdiff_t diff = b – a; printf(“diff = %?”, diff); // % what?

附加列表中指针的指针追加

我通常在python中编程。 为了提高我的模拟性能,我正在学习C.在向链表实现追加函数时,我有一个问题需要理解指针指针的使用。 这是我的书(由Kanetkar理解C指针)中的代码的摘录。 #include #include struct node{ int data; struct node *link; }; int main(){ struct node *p; //pointer to node structure p = NULL; //linked list is empty append( &p,1); return 0; } append( struct node **q, int num){ struct node *temp, *r; //two pointers to struct node temp = *q; if(*q == NULL){ […]

传递2D数组结构

我从数组中处理卡片类型结构。 struct card deck[DECKSIZE]; //The deck is an array of cards structures 我正在使用2Darrays。 一组卡片类型结构的数组 struct card allHands[hands][cards]; 我使用此函数将deck和数组作为指针传递给数组的参数。 我还改变了甲板指针的位置,以模拟在传递给玩家时丢失牌的牌组。 void dealHands(struct card *deck, struct card **handArray, int hands, int cards){ int players; int cardCount; int passCard = 0; struct card * thisDeck; thisDeck = deck; for(players = 0; players < hands; players++){ for(cardCount = 0; […]