输出char*的指针时为什么会发生段错误

#include <stdio.h>


int main()
{
	char* p1 = 1;          
	char* p2 = '1';


    printf("p1 = %c\n", *p1);  //段错误 
	printf("p2 = %c\n", *p2);  //段错误
    
    return 0;
}

这里这两个的用法表示的信息是 p1指针指向的是地址是0x1,p2地址指向的是地址0x31,也就是’1‘的ASCII码

在系统中低地址是不能随便调用的,所以才会产生段错误,

//对应的汇编代码,可以看出这里的地址是0x1和0x31

	char* p1 = 1;          
 80483cd:	c7 44 24 1c 01 00 00 	movl   $0x1,0x1c(%esp)    
 80483d4:	00 
	char* p2 = '1';
 80483d5:	c7 44 24 18 31 00 00 	movl   $0x31,0x18(%esp)
 80483dc:	00 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值