int *a[3]和int (*a)[3]之间有什么区别?
int age; char name[10]; scanf(“%d”, &age); scanf(“%s”, name); 在第一个scanf函数中,我们在age之前使用’&’符号,但在第二个scanf我们不使用’&’因为它是char数组。 谁能告诉我为什么会这样?
有没有人有一个双指针的盒圆图的链接?
我确信答案就是我不能正确理解指针和参考! 所以在我的C文件的开头我为人们定义了一个结构: typedef struct { char id[4]; int age; char name[128]; } people; 然后在main()内部创建一个由10 个人组成的数组,称为记录 。 people* record = (people*)malloc(sizeof(people)* 10); 在main()中我们开始然后潜入一个函数 MyFunction(record); (此函数在main()之前的C文件的开头具有原型 int MyFunction(people *record); 在MyFunction()内部,我们做了各种各样的事情,包括想要增加记录数组的大小,以便它可以容纳更多的人结构。 我试图增加记录数组大小 struct people *tmp = realloc(record, 20 * sizeof (people)); if (tmp) { record = tmp; } 但是这不起作用,如果我尝试在数组中使用新添加的结构,则会导致内存损坏。 正如我所说,我确信这是因为我没有正确地低估指针和参考。 请注意,我不能让MyFunction()将扩展记录数组作为其返回类型,因为我已经将其返回int用于其他内容(我不确定我是否也能正常工作!) -我需要它使用主记录数组。 有人能指出我正确的方向吗?
#include int main(void) { char *t[10]={“Program”, “hjl”,”juyy”}; int i; //printf(“%c \n”,*t[3]); int ch=*t[0]; for(i=0;*t[i]!=’\0′;i++){ printf(“%d”,i); } return 0; } 该计划在一段时间内停止了工作。 任何人都可以解释原因吗?
我需要弄清楚如何将两个不同的结构传递给一个函数。 我尝试使用void *作为参数,但我收到错误: warning: dereferencing ‘void *’ pointer error: request for member left in something not a structure or union 成员权利相同的错误 这是我用一般术语做的(代码可能无法编译)。 struct A{ char *a; struct A *left, *right; } *rootA; struct B{ char *b; struct B *left, *right; } *rootB; void BinaryTree(void *root, void *s){ if(condition) root->left=s; else if(condition) BinaryTree(root->left, s); if(condition) root->right=s; […]
#include int main(){ int arr[] = {1, 2, 3, 4}; int *p; p = arr; printf(“%d\n”, *p); printf(“%d\n”, *arr); p++; printf(“%d\n”, *p); } 此代码输出: 1 1 2 但是当我们添加2行时,如下所示: #include int main(){ int arr[] = {1, 2, 3, 4}; int *p; p = arr; printf(“%d\n”, *p); printf(“%d\n”, *arr); p++; printf(“%d\n”, *p); arr++; printf(“%d\n”, *arr); } 此代码输出: […]
当我遇到char **时,我很困惑,是否真的有必要应对字符串? 例如: double strtod(const char *nptr,char **endptr); 如果endptr不为NULL,则指向停止扫描的字符的指针将存储在endptr指向的位置。 — MSDN 这很复杂,为什么不只是将指向字符的指针复制到endptr ? 调用之后的所有计算都可以通过将指针的值传递给endptr来实现。 真的需要char**吗?
我正在通过Stephen Kochan编写的“Programming in C”一书来教我自己,我在指针上进行了以下练习: 编写一个名为insertEntry的函数,将新条目插入到链表中。 让过程将指向要插入的列表条目的指针(本章定义的struct entry类型)和指向列表中元素的指针作为参数,之后将插入新条目。 struct entry结构定义如下: struct entry { int x; struct entry *ptr; }; 这是我的代码: #include void insert_entry (struct entry *new_entry, struct entry *prev_entry); struct entry { int x; struct entry *ptr; }; int main (void) { struct entry n1, n2, n3, new_entry; struct entry *list_ptr = &n1; n1.x = 1; […]
我用未初始化的指针观察这种奇怪的行为。 从下面的示例中可以看出,有时它会打印一个NULL值,而有些则会以交替的方式打印一个有效的地址。 为什么会这样? 代码 : int *i; printf(“%p\n”, i); 输出 : (零) 代码 : int *i; printf(“%p\n”, i); int *j; printf(“%p\n”, j); 输出 : 0x7fff2d0c1b50 (零) 代码 : int *i; printf(“%p\n”, i); int *j; printf(“%p\n”, j); int *k; printf(“%p\n”, k); 输出 : (零) 0x7fffda5284b0 (零) 代码 : int *i; printf(“%p\n”, i); int *j; printf(“%p\n”, j); […]