摘要:在某些时候可以强调auto 请注意是有可能!!! 奇怪的是,我可以获得寄存器变量的地址。。。 举个例子 若定义为静态变量,count不会重复地=0,它会保存上一次的值
阅读全文
随笔分类 - C语言
摘要:在某些时候可以强调auto 请注意是有可能!!! 奇怪的是,我可以获得寄存器变量的地址。。。 举个例子 若定义为静态变量,count不会重复地=0,它会保存上一次的值
阅读全文
摘要:来举个例子 因为作用域不同,所以程序不会报错 如果插一个呢 我们可以知道,出了代码域之后,i 就会恢复到110 来讲讲文件作用域 虽然go to语句用的少,但我认为用一下可以帮助理解汇编的思想 像int i,我们可以说是声明一个变量i,也可以说是定义一个变量i 链接属性 编译器的工作流程,推荐阅读
阅读全文
摘要:出了循环后,i并没有认for里的i,所以这里的i只作用于for语句里的i 因为蓝色和红色定义相同,所以在for里面屏蔽了外部的蓝色i,但出来后外部的i只认蓝色的i 全局变量 所以说全局变量可以被任何函数use 如果我们把全局变量写在后面是会出错的哦! 这时候我们要用extern 这样就可以了 要让每
阅读全文
摘要:我们一般用char类型的指针来定义字符串 记住,字符串是全局变量 注意: 我们来对上面做小规模的修改 最后结果是这样的↓但只是警告,编译还是通过了, 但没有任何输出 意思就是说你的函数返回了局部变量的地址,这样是不行的 未修改前的字符串可以是因为你没有定义到变量里面去,而这里被定义到了数组里面去~
阅读全文
摘要:#include "stdafx.h" #include #include int sum(int n, ...); //可变参数的函数,...表示参数数目不确定 int sum(int n, ...) //如果n是3的话,就求后面3个的和 { int i, sum = 0; va_list vap;//定义参数列表 va_start(vap, n);...
阅读全文
摘要:我们写一个函数 在In main互换后,x和y并没有改变,这里涉及到了函数作用域的问题 可以自己体会到每个函数的变量都是独立的,不能互相干扰,不能冲突 我们来使用指针 In main互换后x和y变啦 其实很好理解 反汇编下其实可以理解更好,但不用也可以很好理解 所以有了指针(地址),相当于有了哆啦A
阅读全文
摘要:不写声明,也可以执行 但如果没有声明,并且main函数在前面的话,可能会有警告 比较老的编译器会导致出错,出于好习惯,最好写声明
阅读全文
摘要:const使得变量失去了写入修改的功能 只剩下只读的功能 试图修改pi,报错了 今天的主题是“指向常量的指针” 发现没办法修改指针所指向的值 但可以试试修改指针所指向的地址 如果想让指针也不可变,可以用常量指针 通过test,发现可以改变值 因为是常量指针,所以不可被修改 下面来看看指向常量的常量指
阅读全文
摘要:额,刚知道了一个消息,吴秀bo。。。原来是那样的人! 可以知道,array和p的跨度是一样的
阅读全文
摘要:解释int **pp = &p ①eax = p所在的地址 ②pp = eax,即pp = p的地址 num 的地址 | 520 p | num 的地址 pp | p的地址 其实上面理解了,下面也就理解了 首先pp = p的地址 *pp = *&p = p的地址解引用 = num的地址 **pp =
阅读全文
摘要:void是无类型,所以不要用来定义变量 无类型指针没办法进行解引用,所以建议强制转换 强制转换类型后: 需要注意:使用void指针,不到必要的时候,不要乱用 NULL指针-空指针,不指向任何数据 p1这种指针没有什么具体数据的,会乱指一气,我们称为野指针或者迷途指针 若对其解引用,如果地址是合法的,
阅读全文
摘要:array这里指向的是第一行的五个元素 可以证明: 我画了一个图 二维数组指针的结论: ①所谓的多维数组其实就是一维数组线性扩展得到的 一道题目:
阅读全文
摘要:int *p1[5] 优先级:[] > * p1被定义为5个元素的数组 所以: 结论:指针数组是一个数组,每个数组元素存放一个指针变量 指针数组的初始化: 指向字符指针的数组: int (*p2)[5] 数组指针 因为优先级是一样的,所以从左到右理解 结论:数组指针是指针,它指向的是一个数组 PS:
阅读全文
摘要:注1:优先级相同的运算符,运算次序由结合性决定。 比如 3 * 4 / 5 % 6,其中乘号、除号和求余运算符在同一优先级,结合性是“左到右”,因此先计算 3 * 4,再计算 / 5,最后计算 % 6 再如 -i++,符号和自增运算符在同一优先级,结合性是“右到左”,因此 -i++ 相当于 -(i+
阅读全文
摘要:指针和数组在很多方面都可以替换 为什么不直接用while(*str++ != '\0')涉及到了Lvalue和Rvalue的问题 // http://www.dotcpp.com/wp/692.html *target++,的意思是先取target地址的值,判断是否是'\0',再取(target+1
阅读全文
摘要:因为数组名其实是数组第一个元素的地址 假设a是数组的话 p = a和p = &a[0]是等价的 因为数组变量名其实是数组第一一个元素的地址,因此一样 以下这种情况*(p+1)这样的,不是地址+1,而是指数组下一个元素 这是因为我们之前已经告诉了编译器了,即我们将p定义成了整型指针变量,于是我们+1的
阅读全文
摘要:貌似没什么难的 不想解释了 算了,疏通下逻辑把 定义整形变量 c , i , nwhite,nother 再定义长度位10的整型数组ndigit[10] 那个for是将数组的值都初始化为0了 下面是循环体的执行,条件依旧是那个,已经讲过 那个 if (c >= '0' && c <= '9') ++
阅读全文
摘要:这个是单词计数 有点难理解,不是说结构多难,而是这本书其实也没阐明这个程序的功能 再加上是翻译过来的,刚开始看还是会蒙逼的 阐述下整个逻辑: 共有5个变量,c是我们输入的字符,nl代表\n的个数,nw代表单词数,nc表示字母数 所谓的IN 和 OUT就是一个种状态,有点类似于标志寄存器 我们首先,给
阅读全文
摘要:关于putchar()看图即可理解 getchar()接收的是字符 比如 int c; c = getchar(); int c; c = getchar(); 此时你输入的东西,getchar都认为它是字符 就算你输入1,getchar接收的是'1' 但getchar()返回的是int整型 如 i
阅读全文
|