1. почему для массива, например a[10], адрес а и &а одинаковы?ведь &a - это адрес ячейки памяти, где лежит адрес первого элемента массива, а а - это адрес первого элемента массива?
2. почему так странно выделяется память для структур(см ниже)
вот программа:
Код: Выделить всё
#include<stdio.h>
#include<string.h>
#include<errno.h>
char *program_name;
int main(int argc,char **argv)
{
program_name=argv[0];
struct st
{
char a;
char b;
char c;
char*d;
char e[10];
}st0;
char a[10];
printf("&a=%p,a=%p\n",&a,a);
printf("st=%d\n",sizeof(struct st));
printf("&st0=%p\n",&st0);
printf("&st0.a=%p\n",&st0.a);
printf("&st0.b=%p\n",&st0.b);
printf("&st0.c=%p\n",&st0.c);
printf("&st0.d=%p\n",&st0.d);
printf("&st0.e=%p\n",&st0.e);
printf("st0.e=%p\n",st0.e);
return 1;
}и рез
Код: Выделить всё
#./e
&a=0xbffff710,a=0xbffff710; /*(к 1.)???почему одинаковы????должны же быть разные???*/
st=20
&st0=0xbffff720
&st0.a=0xbffff720
&st0.b=0xbffff721
&st0.c=0xbffff722 /*(к 2.)почему след 724, а не 723; ведь char заним 1 байт?*/
&st0.d=0xbffff724
&st0.e=0xbffff728
st0.e=0xbffff728
#и вот рез той же самой прогр только для
Код: Выделить всё
struct st
{
char a;
char b;
char*d;
char e[10];
}st0;Код: Выделить всё
#./e
&a=0xbffff710,a=0xbffff710; /*???почему одинаковы????должны же быть разные???*/
st=20
&st0=0xbffff720
&st0.a=0xbffff720
&st0.b=0xbffff721 /*(к 2.)почему след 724, а не 722; ведь char заним 1 байт?*/
&st0.d=0xbffff724
&st0.e=0xbffff728
st0.e=0xbffff728
#и для
Код: Выделить всё
struct st
{
char a;
char b;
char c;
char c1;
char*d;
char e[10];
}st0;Код: Выделить всё
#./e
&a=0xbffff710,a=0xbffff710; /*(к 1.)???почему одинаковы????должны же быть разные???*/
st=20
&st0=0xbffff720
&st0.a=0xbffff720
&st0.b=0xbffff721
&st0.c=0xbffff722
&st0.c1=0xbffff723
&st0.d=0xbffff724
&st0.e=0xbffff728
st0.e=0xbffff728
#и для
Код: Выделить всё
struct st
{
char a;
char b;
char c;
char c1;
char c2;
char*d;
char e[10];
}st0;Код: Выделить всё
#./e
&a=0xbffff710,a=0xbffff710; /*(к 1.)???почему одинаковы????должны же быть разные???*/
st=20
&st0=0xbffff720
&st0.a=0xbffff720
&st0.b=0xbffff721
&st0.c=0xbffff722
&st0.c1=0xbffff723
&st0.c2=0xbffff724 /*(к 2.)почему след 728, а не 725; ведь char заним 1 байт?*/
&st0.d=0xbffff728
&st0.e=0xbffff72c
st0.e=0xbffff72c
#спасибо.