如何在结构中增加指针值和指针地址

时间:2017-10-14 15:45:05

标签: c

如何增加结构中定义的指针的地址?我在main函数中定义了一个指向结构的指针。如果我使用ptr->element,其中element是结构中的指针,它是指元素指向的值吗?如果是,如何使元素指向下一个位置?

2 个答案:

答案 0 :(得分:0)

它是特定于实现的,但实际上规则是:

Struct成员按其声明的顺序存储。  如有必要,在每个结构成员之前添加padding,以确保正确的对齐

每个基本类型Ntype都需要sizeof(Ntype)字节的对齐。

< / p>

所以,给定以下结构:

struct Ntype
{
   char ch1;
   short sh;
   char ch2;
   int *a;
};
  • ch1位于偏移0
  • 插入填充字节以对齐
  • sh偏移2
  • ch2位于偏移4处,紧接在s
  • 之后
  • 插入3个填充字节以对齐...
  • a偏移8

所以sizeof(Ntype)是16。

答案 1 :(得分:0)

要增加char*成员的地址,您可以执行以下操作:

//assuming that CB_t is already allocated.
char *temp = CB_t->buffptr;
//now you can increment temp as so
char myChar = *temp;
temp++;
char nextChar = *temp;
temp++;//and so on. You can also put it in a loop, where you end condition would be encountering a '\0' character.

不要这样做:CB_t->buffptr++因为它会破坏你的结构!如果你这样做,那么buffptr将修剪成员中的前导字符。

你也可以这样做:

char firstChar = *CB_t->buffptr;
char secondChar = *(CB_t->buffptr + 1);
char thirdChar = *(CB_t->buffptr + 2);//and so on

我建议你阅读有关指针算法的this讨论。包裹你的脑袋可能是一个艰难的概念,但一旦你做到了,你就会拥有一把非常强大的武器!