[英]C pointer in char array
我試圖了解我是否可以解決我遇到的問題,我想添加一個指向堆棧分配數組的數組成員的指針,以便該數組成員可以動態更改。
必須是無符號字符,因為這是一個通訊緩沖區。
int main() {
unsigned char *var;
unsigned char test[] = {*var, 0x34, 0x56, 0x78};
*var = 0x12;
printf("%x %x %x %x %x", *var, test[0],test[1],test[2],test[3]);
*var = 0xff;
printf("%x %x %x %x %x", *var, test[0],test[1],test[2],test[3]);
}
感謝您的任何回答,是或否。
編輯:感謝所有建議,在嘗試找到不同的方法之前,我已經研究過使用數組索引。 問題是沒有辦法知道數組索引,因為正在編輯的數組被連接起來形成一個更大的數組,所以索引發生了變化,這就是我想使用變量的原因。
你幾乎擁有它。 嘗試這個:
int main()
{
unsigned char* var;
unsigned char test[] = { 0x00, 0x34, 0x56, 0x78 };
var = &test[0]; // Makes var point to the first test[] item
*var = 0x12;
printf("%x %x %x %x %x\n", *var, test[0], test[1], test[2], test[3]);
*var = 0xff;
printf("%x %x %x %x %x\n", *var, test[0], test[1], test[2], test[3]);
}
你的問題是你不明白指針是什么。
unsigned char* var;
unsigned char test[] = { 0x00, 0x34, 0x56, 0x78 };
這會調用未定義的行為。 var
是指向 char 但不指向任何地方的指針(它沒有被初始化或以其他方式說它沒有分配的引用)。 第二個定義 simple 獲取這個指針引用的 char 值(它不指向任何有效字符)並將這個值作為數組test
的第一個元素。 數組本身不包含有關所存儲數據來源的任何信息。
要使此代碼正常工作,您需要為指針分配數組第一個元素的引用。
int main(void)
{
unsigned char test[] = { 0x00, 0x34, 0x56, 0x78 };
unsigned char* var = test; /* or &test[0] */
*var = 0x12;
printf("%x %x %x %x %x\n", *var, test[0], test[1], test[2], test[3]);
*var = 0xff;
printf("%x %x %x %x %x\n", *var, test[0], test[1], test[2], test[3]);
}
小問題:您的main
聲明無效。 它必須是int main(void)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.