你该明白的

1 x86小端模式下
int a = 0x123456;
char *p = &a;
*(p+1) 的值0x34,因为p指向的是变量a内存单元最小地址处char型指针指向的是一个字节的空间所以char型指针+1移动8位,int型指针指向的是4个字节的空间所以int型指针+1移动32位。
2 x86小端模式下 (str指向的是数组内存单元最小地址处)
   char str[] ="123456789";
   *(char *)((short*)str+2))的值是‘5’
3 char *p;p是一个变量,这个变量的值是一个地址,占4个字节
   p = (char *)malloc(sizeof(char) * 10);系统开辟了一块内存,将内存的地址放到p,p这个变量此时的值就是新内存的地址了。
   char **q;
   *q = (char *)malloc(sizeof(char) * 10);*q就是p变量的值,只要p变量的值变了就ok了
下段代码的运行结果:
main()  
 {   
   int a[5]={1,2,3,4,5};   
   int *ptr=(int *)(&a+1);    
   printf("%d,%d",*(a+1),*(ptr-1)); 
}  
答:2,5 
     *(a+1 )就是a[1],*(ptr-1)就是a[4],执行结果是2,5 
  &a+1不是首地址+1,系统会认为加一个a数组的偏移,是偏移了一个数组的大小(本例是5个int) 
  a,&a的地址是一样的,但意思不一样 
    a是数组首地址,也就是a[0]的地址,&a是对象(数组)首地址, 
    a+1是数组下一元素的地址,即a[1],&a+1是下一个对象的地址,即a[5].

4 typedef struct
   {
char * name;
   }P;
P *p = (P*)malloc(sizeof(P));这里开辟的空间只是给变量name开辟了4个字节用来放后来开辟的地址
p -> name = (char *)malloc(sizeof(char *) * 10);
5 int a = 5;b = 3;
   if(!a && b++){}
 这时候a的值是5b的值是3.为什么呢。因为!a的值是0了,那么!a && b++的值就已经确定了,不会再执行b++了。
6 变成风格:
if( “a" ==i ){ a++ ;}这种风格较好:因为如果把"a" == i写成"a" = i的话编译器会自动报错,因为不能给常量赋值呀。
7 int a的bit3位置1,也就是第四位
   a |= (0x1 << 3)
8      
        char *str = "hello world!";
        char *s = (char *)malloc(sizeof(char) * 20);
        memset(s, 0, sizeof(s));
        char *ss = s;//知道为什么这么写嘛。s指向的一整块内存。不能s++遍历。
        assert(s && str);
        while(*str)
        {
                *ss++ = *str++;
        }
        *ss = *str;//for '\0'
        printf("%s\n", s);
9
        char buf[10] = "123456789";
        int *p = (int *)buf;
        printf("%d\n", *(buf + 1));buf一次指向一个字节的内存,要把这一个字节的内容'2'以%d的形式打印出对应的ASCII值(也就是说char型'2'与int型50在内存中二进制值是一样的)
        printf("%d\n", *(p + 1));p一次指向4个字节的内存,要把这4个字节的内存"5678"以%d的形式打印出
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值