Arrays 包含指针的结构上的指针:数组命名法有效,但无效(ptr+;1)。为什么?
我很难制定我的问题,所以我使用onlinegdb创建了一个示例Arrays 包含指针的结构上的指针:数组命名法有效,但无效(ptr+;1)。为什么?,arrays,c,pointers,Arrays,C,Pointers,我很难制定我的问题,所以我使用onlinegdb创建了一个示例 #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct { unsigned int GlobalHeader; unsigned char * Data; }GLOBAL_DEVICE; GLOBAL_DEVICE * GlobalDevice; int main() {
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{
unsigned int GlobalHeader;
unsigned char * Data;
}GLOBAL_DEVICE;
GLOBAL_DEVICE * GlobalDevice;
int main()
{
GLOBAL_DEVICE GlobalTest[2];
GlobalDevice = GlobalTest;
char Buffer[] = {"ABCDEFG"};
char TestChar;
(GlobalDevice + 1)->Data = (char *)malloc(8 * sizeof(char));
memcpy((GlobalDevice + 1)->Data,Buffer,8);
//TestChar = (GlobalDevice + 1)->(Data + 1); <- This doesn't work. Error : expected identifier before '('
TestChar = (GlobalDevice + 1)->Data[1]; // This works
printf(&TestChar);
return 0;
}
使用(ptr+1术语)
谢谢
让·弗朗索瓦
编辑:对于阅读这个问题的其他人来说,我的误解是因为我认为数组[I]等于(数组+I)。这是一个错误,数组[i]等于*(数组+i)。使用((GlobalDevice+1)->数据)+1
,甚至只是(GlobalDevice+1)->数据+1
数据本身不是指针,它是一个成员名,除了在
或->
的右侧之外,它本身作为表达式没有任何意义。尤其是作为+
的操作数,它毫无意义
更正:array[i]
等同于array+i
,而不是*(array+i)
。因此(GlobalDevice+1)->Data[1]
的正确等价物是*((GlobalDevice+1)->Data+1)
我认为不管怎样,[]
语法在这两个地方都更清晰。我会写信的
TestChar = GlobalDevice[1].Data[1];
(顺便说一句,printf(&TestChar)
结尾不起作用,因为TestChar
后面没有空字符,所以&TestChar
不是字符串。相反,写putchar(TestChar);
或printf(“%c”,TestChar);
(GlobalDevice+1)
与GlobalDevice不同[1]
。我同意数组命名法更容易编写,但我正在努力深入理解指针。你的回答很有道理。我将结束这个问题。谢谢。
(GlobalDevice + 1)->(Data + 1)
TestChar = GlobalDevice[1].Data[1];