最近在編碼時引起了我的好奇心:是否可以在 C 中使用復雜的指標?我解釋一下:我想鏈接兩個指標,比如說兩個 int * p1 和 p2。這個想法是,每當我編輯 p1 的值時,p2 的值也會被編輯。例子 :
*p1 = 2例如,我想要那個*p2 = *p1-1;*p1=3;. 但是這里*p2仍然等于1...有沒有辦法使每次都*p2等于,而不必在每次修改后編輯 的值?*p1 - 1*p2*p1
不必每次都編輯復雜的指標。
uj5u.com熱心網友回復:
簡短的回答是否定的。
指標沒有“引擎蓋下的魔法”。我知道,當開始時,它可能看起來如此。因為像這樣的東西明顯的魔力
int x=12;
int *y=&x;
*y=15; // Wow, value of x has changed
但實際上,這些都是非常初級的東西。除了我們撰寫的普通操作之外,絕對沒有其他操作。y是 的“地址” x。*y=15改變地址 的內容y,也就是說,因為這是 y 的值,所以它在地址 的內容x。所以它改變了x。
它不像在更高級別的語言中,比如 python,甚至 C ,你可以重新定義做作的運算子,或者類似的東西,所以說這個簡單的事實*y=15比改變地址的內容要多得多y,而且影響其他值。明白必須計算一些東西15-1才能做你想做的事。這些計算必須在某個地方完成。在高級語言中,它們可能是隱含的,因為您說,不知何故,這=意味著許多這樣的計算。但是在低級語言中,唯一發生的計算是您明確編碼的計算。
所以,再次簡短回答:不,不是在 C 中。
uj5u.com熱心網友回復:
不要使用單獨的指標,而是使用指標算術:
#include<stdio.h>
int main (void)
{
int array [3] = {1,2,3};
int* p1 = &array[1];
const int offset = -1;
printf("p1: %d p2: %d\n", *p1, p1[offset]);
p1 = &array[2];
printf("p1: %d p2: %d\n", *p1, p1[offset]);
}
只要偏移量不會導致越界訪問,這很好且定義明確。
uj5u.com熱心網友回復:
如果p1和p2是兩個指向同一個物件的不同指標物件:
---
p1: | | -----
--- | ---
---> | |
--- | ---
p2: | | -----
---
然后寫入*p1(注意取消參考)與寫入相同*p2- 任何一個都會更新指向的物件。但是,p1andp2本身是完全獨立的物件,因此更改p1(no dereference) 的值絕對沒有影響,p2反之亦然。
當另一個物件的值發生變化時,C 沒有給你一種自動更新一個物件的值的方法。您必須撰寫代碼以保持p1和p2同步的值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/524306.html
標籤:C指针
