是什麼我可以做分配的內存有沒有限制什麼(標準明智)我可以做我想做的與分配的內存
例如
#include <stdio.h>
#include <stdlib.h>
struct str{
long long a;
long b;
};
int main(void)
{
long *x = calloc(4,sizeof(long));
x[0] = 2;
x[3] = 7;
//is anything beyond here legal(if you would exclude possible illegal operations)
long long *y = x;
printf("%lld\n",y[0]);
y[0] = 2;
memset (x,0,16);
struct str *bar = x;
bar->b = 4;
printf("%lld\n",bar->a);
return 0;
}
總結:
- 只要尺寸合適,我可以重新改寫指向其他數據類型和結構的指針嗎?
- 我可以在寫之前閱讀嗎?
- 如果不是我可以在我寫完後閱讀嗎?
- 我可以在小於分配內存的結構中使用它嗎?
[6.5p6](http://port70.net/~nsz/c/c11/n1570.html#6.5p6)意味着'memove'和company修改了有效類型。 – StoryTeller
@StoryTeller memmove和memcpy當然可以,但我不認爲memset屬於同一個保護傘。如果你說memset設置了有效類型(對於char - 還有什麼?),那麼通常使用的成語memset(x,0,n);來初始化一些int將導致UB,所以我認爲這不會做一個實際的解釋 –
因此,在bar-> b上讀或寫會沒問題,因爲它會是同一個別名? –