Tag: 解除引用

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; } 我读到连续使用’*’和’&’相互抵消,但这个解释没有提供上述代码中产生的两个不同输出背后的原因?

使用带指针的2 D数组的4种不同方法,这是对的吗? 解释会有很大帮助

下面的四个程序输入一个二维数组,然后打印出来。 第一个打印出垃圾值,并发出一些警告(我不明白)。 第二个工作正常,因为我相信二维数组线性存储在内存中,它也有意义。 第3个工作正常,但我不知道为什么它的工作原理。 第四个也适用。 因此,如果有人能够解释每种方法的运作方式,那将会很有帮助 我担心我对指针如何工作的理解并不像我想象的那么好。 int main(){ int n; int a [3][4]; int i=0,j=0,count=0; for(i=0;i<3;i++){ for(j=0;j<4;j++){ scanf("%d",(a+4*i+j)); // Output-514623632 514623648 514623664 514623680 514623696 514623712 514623728 514623744 514623760 514623776 514623792 514623808 } } for(i=0;i<3;i++){ for(j=0;j<4;j++){ printf("%d\t",*(a+4*i+j)); } } return 0; } Warnings -solution.c:15:21: warning: format '%d' expects argument of type 'int *', but argument […]

为什么解除引用主函数不显示内存内容?

我试图获取函数名[abc()和main()]指向的地址的内存内容,但函数内的printf()都给出了相同的输出,尽管我取消引用了函数名所指的地址。每个函数内部的第二个printf()。 这是为什么? 为什么内存地址由*(abc)和*(main)而不是内容打印? #include void abc(){ printf(“\n%p \n “, abc); printf(“\n%#x\n “,*(abc)); } void main(){ abc(); printf(“\n%p \n “, main); printf(“\n%#x\n “,*(main)); }

指针解除引用如何工作?

#define SWAP_PTRS(a, b) do { void *t = (a); (a) = (b); (b) = t; } while (0) Node* MergeLists(Node* list1, Node* list2) { Node *list = NULL, **pnext = &list; if (list2 == NULL) return list1; while (list1 != NULL) { if (list1->data > list2->data) SWAP_PTRS(list1, list2); *pnext = list1; pnext = &list1->next; list1 […]

L值与C中的R值

我正在回答这本教科书中的教科书问题。 我正在学习C中的指针,并且遇到了l值和r值。 根据我的理解: l-values are values that are defined after they are executed (++x) r-values are values that are not defined after they are executed (x++) 这是正确的吗? 我想回答的问题(我的尝试): a) Which of the following C expressions are L-Values? 1. x + 2 Not a L value 2. &x Is a L value 3. *&x Is a […]

如何理解C中的指针星*?

我正在努力使用指针符号*,我发现它在声明和表达式中的使用方式非常混乱。 例如: int *i; // i is a pointer to an int 但是语法背后的逻辑是什么? *之前的*是什么意思? 我们来看下面的例子。 请纠正我错在哪里: char **s; char *(*s); // added parentheses to highlight precedence 这就是我失去轨道的地方。 parantheses之间的* s意味着:s是指针? 但指针是什么? 括号外的*是什么意思:指向s指向的指针? 所以这个意思是:指向s指向的指针是一个指向char的指针? 我很茫然。 *符号在声明和表达式中的解释是否不同? 如果是这样,它的解释方式有何不同? 我哪里错了?

指向指针和指向数组的指针之间的区别?

鉴于数组的名称实际上是指向数组的第一个元素的指针,以下代码: #include int main(void) { int a[3] = {0, 1, 2}; int *p; p = a; printf(“%d\n”, p[1]); return 0; } 按预期打印1 。 现在,鉴于我可以创建一个指向指针的指针,我写了以下内容: #include int main(void) { int *p0; int **p1; int (*p2)[3]; int a[3] = {0, 1, 2}; p0 = a; p1 = &a; p2 = &a; printf(“p0[1] = %d\n(*p1)[1] = %d\n(*p2)[1] = […]