我试图理解指针和不同的声明。为我提供了一个带有指针逻辑的示例,但我无法弄清楚它是如何工作的。
我给出了以下内容:
allowedLateness
它说结果是10 5 5 5,但我无法理解为什么。
提前谢谢!
答案 0 :(得分:3)
绘图是找出指针操作的最佳方法。
(不过,在纸上速度要快得多。)
{{1}}
答案 1 :(得分:1)
注意三个声明:
p = &j;
q = p;
*q = 5;
因此,*q
与指向{{1}的*p
相同,被设置为5。
因此,三个表达式j
,j
,*p
都产生相同的值。
答案 2 :(得分:1)
下面是有关代码功能以及变量值如何更改的分步说明。我建议您使用调试器并单步执行代码,并在每一步之后检查每个变量。
但是事情就这样了:
sed 's/","/|/g' $filename | sed 's/|",/||/g' | sed 's/|,"/|/g' | sed 's/",/ /g' | sed 's/^.//' | awk '{print substr($0, 1, length($0)-1)}' | sed 's/,/ /g' | sed 's/"/ /g' | sed 's/|/,/g' > "out_"$filename
注意:
// Define two int variables (i and j) and two int-pointer variables (p and q)
int i, j, *p, *q; // i: uninitialized j: uninitialized p: uninitialized q: uninitialized
// Assign 10 to i
i = 10; // i: 10, j: uninitialized, p: uninitialized, q: uninitialized
// Make p point to j
p = &j; // i: 10, j: uninitialized, p: points to j, q: uninitialized
// Allocate some memory for q
q = malloc(sizeof(int)); // i: 10, j: uninitialized, p: points to j, q: points to uninitialed memory
// Assign i to the memory that q points to
*q = i; // i: 10, j: uninitialized, p: points to j, q: points to memory containing 10
// Assign i to j
j = i; // i: 10, j: 10, p: points to j, q: points to memory containing 10
// Make q point to the same as p
q = p; // i: 10, j: 10, p: points to j, q: points to j
// Assign 5 to the memory that q points to (which is j)
*q = 5; // i: 10, j: 5, p: points to j, q: points to j
// print i (10), j (5), the memory p points to (j aka 5), the memory q points to (j aka 5)
printf("%d %d %d %d", i, j, *p, *q); // Print 10 5 5 5
表示内存泄漏,因为不再有指向动态分配内存的指针。