指针3

char names[] = "ABCDE"; 
char names[6] = {"A","B","C","D","E","\0"};

printf("%s\n",arr);

printf("%s\n",names);


结果没有区别
%s:打印一个字符串,直到内存为0为止。

复习:内存分布图


代码区      :代码

栈              :参数、局部变量

全局变量  :全局变量可读可写  初始化,不初始化

常量区       :常量区 可读不可写


  char* x = "china"; 常量
  char y[] = "china"; 全局区变量
void Function(){
x="abc";//x地址可改
 *(x+1)="A";//x指向的字符串不能修改  c000005 地址访问错误 x存的是"china"的首地址,x可改,x指向的"china"不可改.因为"china"在常量区。  
  y[1]="A";//修改h    可以修改 全局区变量

}

void Function(){            40空间
   char* x ="china";        44空间 存的是"china"的首地址,x可改,x指向的"china"不可改.因为"china"在常量区。
    
   dword ptr [ebp-4],offset string "china"(0042201c) // 0042201c值:63 68 69 6e 61 00 00 00  

   char y[]="china";      常量区拷贝进堆栈 单独48空间,加上面52空间

   mov eax,[string"china"(0042201c)]         eax,存的6e696863
   mov dword ptr [ebp-8],eax
   mov cx,word ptr[string"china"+4(00422020)] cx,存的61  
   mov wod ptr [ebp-4],cx
   自动补齐所以用了8个字节最后存进内存

*(x+1) = 'A';//直接修改常量区不可以,修改失败。
y[1]='A'; //拷贝进堆栈,可以修改

}










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值