C语言中的指针逻辑练习

时间:2019-05-02 14:20:15

标签: c

我试图理解指针和不同的声明。为我提供了一个带有指针逻辑的示例,但我无法弄清楚它是如何工作的。

我给出了以下内容:

allowedLateness

它说结果是10 5 5 5,但我无法理解为什么。

提前谢谢!

3 个答案:

答案 0 :(得分:3)

绘图是找出指针操作的最佳方法。
(不过,在纸上速度要快得多。)

{{1}}

答案 1 :(得分:1)

注意三个声明:

  • p = &j;
  • q = p;
  • *q = 5;

因此,*q与指向{{1}的*p相同,被设置为5。

因此,三个表达式jj*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

表示内存泄漏,因为不再有指向动态分配内存的指针。