小编sha*_*man的帖子

如何在C/C++中减去两个IPv6地址(128位数)?

我正在存储sockaddr_in6支持四个32位数组addr [4]的IP地址.基本上是一个128位的数字.

我正在尝试计算给定IPv6范围内的IP数量(两者之间的IP数).所以这是使用两个长度为4的数组从一个减去另一个的问题.

问题是因为没有128位数据类型,我无法转换为十进制.

万分感谢!

c c++ networking ipv6

6
推荐指数
1
解决办法
764
查看次数

增加数组错误指针的运算符?

我正在尝试一些非常简单的事情,应该很简单,但它不知何故让我感到烦恼......

我试图理解++对数组的影响,当被视为数组时被视为指针和指针.

所以,

int main()
{
    int a[4] = { 1, 4, 7, 9 };
    *a = 3;
    *(a+1) = 4;
    *++a = 4; //compiler error
}
Run Code Online (Sandbox Code Playgroud)

1:所以在*(a+1)=4我们设置[1] = 4; //快乐但是,当*++a = 4;我想要指针a增加一个因为++先于*然后*启动而我们使它等于4.但是这个代码不起作用......为什么会这样?

另一个问题:

int main()
{

    int* p = (int *)malloc(8);
    *p = 5;
    printf("%d", p[0]);

    *++p = 9; //now this works!
    printf("%d", p[1]); //garbage
    printf("%d", p[0]); //prints 9

}
Run Code Online (Sandbox Code Playgroud)

2:现在*++ p = 9; 工作得很好,但它的表现并不像数组.两个有什么不同?这只是递增p,并使其等于9.如果我打印p [0],它现在打印9,我看到虽然不能通过p [0]访问它,*(p-1)显示5还在那里.所以用[0]索引指针,它究竟指向哪里?发生了什么变化?

非常感谢所有专家!

c c++ arrays pointer-arithmetic dereference

5
推荐指数
1
解决办法
3844
查看次数

标签 统计

c ×2

c++ ×2

arrays ×1

dereference ×1

ipv6 ×1

networking ×1

pointer-arithmetic ×1