33,311
社区成员
发帖
与我相关
我的任务
分享
typedef struct {
int length;
EleType data[MAXSIZE];
}Sqlist;
Status initList(Sqlist *list){
printf("length=%d", list->length);
}
int main(int argc, char *argv[]) {
Sqlist list;
initList(&list);
return 0;
}
#include <stdio.h>
typedef char ElemType;
#define MAXSIZE 10
typedef struct node{
int length;
ElemType data[MAXSIZE];
int test;
}*seqlist;
void initlist(seqlist list){
int i;
for (i=0;i<=9;i++)
printf("length地址=%p\ti地址=%p\tdata[i]地址=%p\ttest地址=%p\n\n",&(list->length),&i,(list->data)+i,&(list->test));
}
void main()
{
struct node listx;
seqlist list;
listx.test=3;
list=&listx;
initlist(list);
}
在这里seqlist结构中定义了test变量来测试
当把初始化函数中变量i和for语句去掉后,多次运行程序之后的结果是
length地址=0x7ffc8ed25ff0 i地址=0x7ffc8ed25fdc data[i]地址=0x7ffc8ed2b5ea test地址=0x7ffc8ed26000
length地址=0x7ffde1febb40 i地址=0x7ffde1febb2c data[i]地址=0x7ffde1ff1123 test地址=0x7ffde1febb50
length地址=0x7ffd6d92a070 i地址=0x7ffd6d92a05c data[i]地址=0x7ffd6d92f610 test地址=0x7ffd6d92a080
length地址=0x7ffdf95250a0 i地址=0x7ffdf952508c data[i]地址=0x7ffdf952a5f9 test地址=0x7ffdf95250b0
length地址=0x7ffe69f77ea0 i地址=0x7ffe69f77e8c data[i]地址=0x7ffe69f7d421 test地址=0x7ffe69f77eb0
length地址=0x7fffe3618900 i地址=0x7fffe36188ec data[i]地址=0x7fffe361deee test地址=0x7fffe3618910
length地址=0x7ffd62444040 i地址=0x7ffd6244402c data[i]地址=0x7ffd62449669 test地址=0x7ffd62444050
length地址=0x7ffdf53f4fb0 i地址=0x7ffdf53f4f9c data[i]地址=0x7ffdf53fa57b test地址=0x7ffdf53f4fc0
而添加上去之后结果是
length地址=0x7ffe5f364b70 i地址=0x7ffe5f364b5c data[i]地址=0x7ffe5f364b74 test地址=0x7ffe5f364b80
length地址=0x7ffe5f364b70 i地址=0x7ffe5f364b5c data[i]地址=0x7ffe5f364b75 test地址=0x7ffe5f364b80
length地址=0x7ffe5f364b70 i地址=0x7ffe5f364b5c data[i]地址=0x7ffe5f364b76 test地址=0x7ffe5f364b80
length地址=0x7ffe5f364b70 i地址=0x7ffe5f364b5c data[i]地址=0x7ffe5f364b77 test地址=0x7ffe5f364b80
length地址=0x7ffe5f364b70 i地址=0x7ffe5f364b5c data[i]地址=0x7ffe5f364b78 test地址=0x7ffe5f364b80
length地址=0x7ffe5f364b70 i地址=0x7ffe5f364b5c data[i]地址=0x7ffe5f364b79 test地址=0x7ffe5f364b80
length地址=0x7ffe5f364b70 i地址=0x7ffe5f364b5c data[i]地址=0x7ffe5f364b7a test地址=0x7ffe5f364b80
length地址=0x7ffe5f364b70 i地址=0x7ffe5f364b5c data[i]地址=0x7ffe5f364b7b test地址=0x7ffe5f364b80
length地址=0x7ffe5f364b70 i地址=0x7ffe5f364b5c data[i]地址=0x7ffe5f364b7c test地址=0x7ffe5f364b80
length地址=0x7ffe5f364b70 i地址=0x7ffe5f364b5c data[i]地址=0x7ffe5f364b7d test地址=0x7ffe5f364b80
所以可以知道C语言对于定义的变量,无论是否赋值,系统都会为其提供一个安全的区域来允许它访问