• 徐洲更
    2020-01-23
    同样也有@大牛凯一样疑惑,不过不只是针对指针,而是所有数据类型。C语言是如何存放类型信息呢?对于`int a`而言,使用`a="123"`将字符串赋值给整型是会出问题的。这种类型错误的底层原理是啥呢?是不是C语言会划定一些区域,用来存放不同类型的变量呢?

    作者回复: 类型信息会被转换成相关的汇编代码。这个当中涉及到两件事情:一个是类型检查,这个是在编译阶段就做完了,另一个就是具体的程序运行,而运行阶段就已经没有了类型信息。也就是说,你所谓的出错,是在编译阶段报的错误。这个问题,你可以往后看,看到预处理命令一节的时候,可能就会认识的更清晰了。

     1
     2
  • 大牛凯
    2020-01-23
    老师好,请教一个问题,所有指针如果都是无差别存储地址的话,那拿到一个指针如何判断它的类型呢?整数型和字符型指针中,“整数”和“字符”这两个类型是存放在哪的呢?

    作者回复: 这个信息已经转换成了相关的汇编代码,你想想,指针的类型是不是只有在加减运算和取值操作的时候有用?那么转换成汇编的时候,只需要对这两个操作,做针对性的转换即可。

     1
     2
  • rocedu
    2020-02-10
    把内存抽象成字节数组,上面内容就更容易理解了,总结的真好!
    
    
  • 信念
    2020-02-08
    #include<stdio.h>

    int main(){
    int a, *p = &a;
    char*q = &a;
    printf("%p %p", p, q);
    printf("%p %p", p + 1, q + 1);
      return 0;
    }
    请问一下为什么上述程序编译不了呀?我用了gcc,但是报错了,麻烦老师看一下。
    展开

    作者回复: 报错信息发我一下

     1
    
  • 潮汐
    2020-01-31
    更清楚理解关于c语言中的数组,指针,内存空间(字节,存贮单元)的关系,还有他们的一些运算的原理。老师的讲解思路清晰连贯,跟下来学到非常多,点赞!

    作者回复: d(^_^o)

    
    
  • Geek_Andy_Lee00
    2020-01-24
    参照老师的参考**答案和等价**关系,我能想到的替换类型还有:
    1)将参考**答案中的a替换为p;
    2)&(*(p+1).x);
    3)&(a[0].x)+2或者&(a[1].y)-1;
    4)&(*p.y)+1
    对吗老师?
    展开

    作者回复: 第四个有错误,直接引用运算符 . 的优先级要高于 取值运算符 *,也就是说先算右边的 p.y,这个是不对的。更多的关于运算符优先级的内容,你可以上网自行搜索。

    
    
我们在线,来聊聊吧