天道酬勤,学无止境

C/C++ post-increment/-decrement and function call [duplicate]

Possible Duplicate:
Undefined Behavior and Sequence Points

I am using microsoft visual c++. Look at the following example:

int n = 5;
char *str = new char[32];
strcpy(str, "hello world");
memcpy(&str[n], &str[n+1], 6+n--);
printf(str);
// output is "hell world"

So unexpectadly my compiler produces code that first decrements n and then executes memcpy. The following source will do what i expected to happen:

int n = 5;
char *str = new char[32];
strcpy(str, "hello world");
memcpy(&str[n], &str[n+1], 6+n);
n--;
printf(str);
// output is "helloworld"

First I tried to explain it to myself. The last parameter gets pushed on the stack first, so it may be evaluated first. But I really believe that post increment/decrement guarantee to be evaluated after the next semicolon.

So I ran the following test:

void foo(int first, int second) {
    printf("first: %i / second: %i", first, second);
}
int n = 10;
foo(n, n--);

This will output "first: 10 / second: 10".

So my question is: Is there any defined behaviour to this situation? Can somebody point me to a document where this is described? Have I found a compiler bug ~~O.O~~?

The example is simplyfied to not make sence anymore, it just demonstrates my problem and works by itself.

评论

There are two related issues at play. First, the order of execution of function arguments is unspecified. What is guaranteed is that all are executed before entering the body of the function. Second, it is undefined behaviour because you are changing and reading n without any sequence points between those expressions.

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 【笔记】JavaScript运算符及运算符优先级
    JavaScript常用运算符简介 运算符也被称为操作符,是用于实现赋值,比较和执行算数运算等功能的符号.JavaScript中常用的运算符有:算数运算符、递增和递减运算符、比较运算符、逻辑运算符、赋值运算符。 一、算术运算符 概念:算术运算符使用的符号,用于执行两个变量或值的算算术运算 算术符描述+加-减*乘/除%取模(取余) 注意: 取余运算符的主要用途 余数为0,说明这个数能被整除。算术运算符的优先级 先乘除,后加减,有小括号先算小括号里面的 例如: //算术运算符,浮点数运算会有问题 console.log(1 + 2); console.log(1 - 2); console.log(1 * 2); console.log(1 / 2); console.log(3 % 2); //取余(取模) console.log(3 % 5); //结果为3 //浮点数在算术运算符里面会有问题 console.log(0.2 + 0.3); console.log(0.07 * 100); //7.000000000000001 //不能直接拿着浮点数进行相比较是否相等 var num = 0.1 + 0.2; console.log(num == 0.3); //false //表达式、返回值 console.log(1 + 1); //2 就是返回值 var num = 1 +
  • JavaScript——运算符(包括:算数运算符、递增和递减运算符、比较运算符、逻辑运算符、逻辑中断、赋值运算符以及运算符的优先级)
    运算符 运算符也被称为操作符,是用于实现赋值、比较和执行算数运算等功能的符号。 JavaScript中常用的运算符有: (1)算数运算符 (2)递增和递减运算符 (3)比较运算符 (4)逻辑运算符 (5)赋值运算符 算数运算符 算数运算符用于执行两个变量或值的算数运算。(注意优先级,先乘除,后加减,有括号先算括号里面的) 运算符说明+加-减*乘/除%取余数(取模) 浮点数值的最高精度是17位小数,但在进行算数计算时其精度远远不如整数。 console.log(0.1 + 0.2); //结果不是0.3,而是:0.30000000000000004 var num = 0.1 + 0.2; console.log(num = 0.3); //false 表达式:简单来说,就是由数字、运算符、变量等组成的式子,如:1 + 1。 表达式最终都会有一个结果返回给我们,我们称之为返回值,如:var num = 1 + 1中,1+1的计算结果2就是返回值。 递增和递减运算符 如果需要反复给数字变量添加或减去1,就可以使用递增(++)或递减(–)运算符来完成。 在JavaScript中,递增(++)和递减(–)既可以放在变量前面也可以放在变量后面。放在变量前面时,我们可以称为前置递增(递减)运算符;放在变量后面时,我们可以称为后置递增(递减)运算符。 递增和递减运算符必须和变量配合使用。 1
  • 前端学习之JavaScript——运算符
    1、算数运算符 1.1 算术运算符概述 概念:算术运算使用的符号,用于执行两个变量或值的算术运算。 1.2 浮点数的精度问题 浮点数值的最高精度是 17 位小数,但在进行算术计算时其精确度远远不如整数。 var result = 0.1 + 0.2; // 结果不是 0.3,而是:0.30000000000000004 console.log(0.07 * 100); // 结果不是 7, 而是:7.000000000000001 所以:**不要直接判断两个浮点数是否相等 ! ** 1.3 表达式和返回值 表达式:是由数字、运算符、变量等以能求得数值的有意义排列方法所得的组合简单理解:是由数字、运算符、变量等组成的式子表达式最终都会有一个结果,返回给我们,我们成为返回值 2、递增和递减运算符 2.1 递增和递减运算符概述 如果需要反复给数字变量添加或减去1,可以使用**递增(++)和递减( – )**运算符来完成。在 JavaScript 中,递增(++)和递减( – )既可以放在变量前面,也可以放在变量后面。放在变量前面时,我们可以称为前置递增(递减)运算符,放在变量后面时,我们可以称为后置递增(递减)运算符。注意:递增和递减运算符必须和变量配合使用。 2.2 递增运算符 前置递增运算符 ++num 前置递增,就是自加1,类似于 num = num + 1,但是 ++num
  • 我必须实现哪些函数才能使类可迭代? [复制](What functions must I implement to make a class iterable? [duplicate])
    问题 这个问题已经在这里有了答案: 如何在我的课程中允许range-for循环? [重复] (3个答案) 5年前关闭。 我正在编写一个类,该类包含相同类的子对象的集合,并且要使用标准提供的函数而不是像first() , next() , previous() , last() , getchild(x)等。 在c ++ 14中,在所有情况下都必须实现哪些函数以使类可迭代/可索引? 功能: begin() cbegin() rbegin() crbegin() end() cend() rend() crend() 浮现在脑海中,尽管不一定全部都需要实施。 也可以选择(为方便程序员): size() empty() 我还必须实现其他任何功能,例如前递增/递减或后递增/递减和数组下标运算符,还是真的只是begin()和end()及其变体? 回答1 如果您的容器将begin()和end()为成员函数,并且函数的返回类型支持pre-increment运算符,则可以在大多数情况下使用它。 我能想到的重要的是: range-for 。 您可以使用: Container c; for ( auto& item : c ) { ... } 与迭代器一起使用的函数。 例子: Container c; Item item; std::find(c.begin(), c.end(), item)
  • 02【JS基础】-【 运算符】运算符 /  算数运算符 /  递增和递减运算符 /  比较运算符 / 逻辑运算符 / 赋值运算符 / 运算符优先级
    第二天【 JS 运算符】 运算符 / 算数运算符 / 递增和递减运算符 / 比较运算符 / 逻辑运算符 / 赋值运算符 / 运算符优先级 一. 运算符 1. 运算符(operator) 也被称为操作符,是用于实现赋值、比较和执行算数运算等功能的符号。 JavaScript中常用的运算符有: 算数运算符 递增和递减运算符 比较运算符 逻辑运算符 赋值运算符 2. 算数运算符 2.1 算术运算符概述 概念:算术运算使用的符号,用于执行两个变量或值的算术运算 2.2 浮点数的精度问题 浮点数值的最高精度是 17 位小数,但在进行算术计算时其精确度远远不如整数。 所以:不要直接判断两个浮点数是否相等 ! 2.3 提问 1. 我们怎么判断 一个数能够被整除呢?它的余数是0 就说明这个数能被整除, 这就是 % 取余运算符的主要用途 2. 请问 1 + 2 * 3 结果是?结果是7 ,注意算术运算符优先级的,先乘除,后加减,有小括号先算小括号里面 2.4 表达式和返回值 表达式:是由数字、运算符、变量等以能求得数值的有意义排列方法所得的组合 简单理解:是由数字、运算符、变量等组成的式子 表达式最终都会有一个结果,返回给我们,我们成为返回值 3. 递增和递减运算符 3.1 递增和递减运算符概述 如果需要反复给数字变量添加或减去1,可以使用递增(++)和递减( -- )运算符来完成。 在
  • What functions must I implement to make a class iterable? [duplicate]
    This question already has answers here: How to allow range-for loop on my class? [duplicate] (3 answers) Closed 5 years ago. I am writing a class that contains a collection of child objects of the same class and would like to iterate, and index, through them using the standard-provided functions instead of functions like: first(), next(), previous(), last(), getchild(x) etc. In c++14, which functions must I implement to make a class iterable/indexable in all cases? The functions: begin() cbegin() rbegin() crbegin() end() cend() rend() crend() come to mind, although, probably not necessarily
  • 为什么要避免在JavaScript中使用增量(“ ++”)和减量(“-”)运算符?(Why avoid increment (“++”) and decrement (“--”) operators in JavaScript?)
    问题 jslint工具的提示之一是: ++和- 众所周知,++(递增)和-(递减)运算符会通过鼓励过度的技巧而导致不良代码。 在支持病毒和其他安全威胁方面,它们仅次于错误的体系结构。 有一个plusplus选项禁止使用这些运算符。 我知道像$foo[$bar++]这样的PHP构造可能很容易产生一次错误的错误,但是我想不出比while( a < 10 ) do { /* foo */ a++; }更好的方法来控制循环了while( a < 10 ) do { /* foo */ a++; } while( a < 10 ) do { /* foo */ a++; }或for (var i=0; i<10; i++) { /* foo */ } 。 jslint是否突出显示它们,是因为有些相似的语言缺少“ ++ ”和“ -- ”语法或以不同的方式处理它,还是存在其他一些我可能会想避免的避免“ ++ ”和“ -- ”的理由? ? 回答1 我的观点是始终单独使用++和-,如下所示: i++; array[i] = foo; 代替 array[++i] = foo; 除此之外,其他任何事情都可能使某些程序员感到困惑,在我看来,这是不值得的。 For循环是一个例外,因为增量运算符的使用是惯用的,因此始终是清楚的。 回答2 坦白说,我对这个建议感到困惑。
  • JavaScript之ECMAScript部分学习(运算符)
    Java Script的三个主要组成部分是:ECMAScript(语法),DOM(文档对象模型),BOM(浏览器对象模型)。 运算符(操作符) 1 运算符的分类. 运算符(operator)也被称为操作符,是用于实现赋值、比较和执行算数运算等功能的符号。 这里我们学习下面常用的运算符: 算数运算符递增和递减运算符比较运算符逻辑运算符赋值运算符 2 算数运算符. 顾名思义,就是关于加减乘除等算是运算,js里就是变量或值见的算数运算。 需要注意的是,在js里有个浮点数的问题: var result = 0.1 + 0.2; // 结果不是 0.3,而是:0.30000000000000004 console.log(0.07 * 100); // 结果不是 7, 而是:7.000000000000001 浮点数是不精确的哟,可不要进行浮点数间的比较。 还有二个名词介绍下: 表达式:是由数字、运算符、变量等以能求得数值的有意义排列方法所得的组合。 返回值:就是表达式最终得到的结果。 3 递增和递减运算符. 如果你需要不断的对一个数字变量进行加或减,那么就可以使用递增(++)和递减运算(–)。 在 JavaScript 中,递增(++)和递减( - - )既可以放在变量前面,也可以放在变量后面。放在变量前面时,我们可以称为前置递增(递减)运算符,放在变量后面时,我们可以称为后置递增(递减
  • 递归方法调用中的后递增/递减 (Java)(Post-Incrementing/decrementing in recursive method calls (Java))
    问题 假设您有一个递归方法,并且您在递归调用中对一个值进行后递增/递减。 当预增/减量不会时,为什么这会导致堆栈溢出异常? 前任。 numberCount(currentNumber++); //Stack overflow exception numberCount(++currentNumber); //No stack overflow exception 在此先感谢您的澄清。 回答1 首先 numberCount(currentNumber++); //Stack overflow exception 相当于: numberCount(currentNumber); currentNumber += 1; 而第二个 numberCount(++currentNumber); //No stack overflow exception 相当于 currentNumber += 1; numberCount(currentNumber); 我需要解释更多吗? 回答2 在numberCount(currentNumber++);情况下numberCount(currentNumber++); , 如果numberCount函数抛出异常,变量currentNumber增加吗?
  • javaScript基础 (运算符 逻辑控制语句 循环控制语句)
    运算符 算术运算符 概念 算术运算使用的符号,用于执行两个变量或值的算术运算。 浮点数的精度问题 浮点数值的最高精度是 17 位小数,但在进行算术计算时其精确度远远不如整数。 var result = 0.1 + 0.2; // 结果不是 0.3,而是:0.30000000000000004 console.log(0.07 * 100); // 结果不是 7, 而是:7.000000000000001 所以:不要直接判断两个浮点数是否相等 ! 表达式和返回值 表达式:是由数字、运算符、变量等以能求得数值的有意义排列方法所得的组合,简单理解:是由数字、运算符、变量等组成的式子 表达式最终都会有一个结果,返回给我们,我们称为返回值 递增和递减运算符 如果需要反复给数字变量添加或减去1,可以使用**递增(++)和递减( – )**运算符来完成。 在 JavaScript 中,递增(++)和递减( – )既可以放在变量前面,也可以放在变量后面。 放在变量前面时,我们可以称为前置递增(递减)运算符,放在变量后面时,我们可以称为后置递增(递减)运算符。 注意:递增和递减运算符必须和变量配合使用。 递增运算符 1.前置递增运算符 ++num 前置递增,就是自加1,类似于 num = num + 1,但是 ++num 写起来更简单。 使用口诀:先自加,后返回值 var num = 10
  • JavaScript学习笔记(二)--- 运算符和流程控制
    一、运算符(操作符) 1、运算符的分类 ​ 运算符(operator)也被称为操作符,是用于算术运算、比较和赋值等功能的符号。 ​ JavaScript中常用的运算符有:①算术运算符 ②递增(减)运算符 ③比较运算符 ④ 逻辑运算符 ⑤赋值运算符 2、算术运算符 ​ 算术运算符就是变量或值进行算术运算时使用的符号。算术运算符共有五种,分别为:+ (加) , - (减) , * (乘) , / (除) ,% (取余) 。其中稍微难一点的是 取余运算,取余运算又称取模运算,是指返回除法的余数,例如: 9 % 2 = 1 ; 5 % 3 = 2 ; 3 % 4 = 3. ​ 其次还需要注意的是,虽然浮点数最高能精确到17位小数,但其在进行算术运算时的精确度却不如整数,例如: var result = 0.1 + 0.2; console.log(result);// 结果不是 0.3,而是:0.30000000000000004 console.log(0.07 * 100); // 结果不是 7, 而是:7.000000000000001 ​ 这是因为计算机在进行算术运算时,需要把数据转换成二进制再进行计算,而浮点数的所占的位数多,十分容易出错。所以不要直接判断两个浮点数是否相等。 3、递增(减)运算符 ​ 递增(减)运算符是指 ++ (递增) – (递减)
  • JavaScript基础-运算符
    1 - 运算符(操作符) 1.1 运算符的分类 运算符(operator)也被称为操作符,是用于实现赋值、比较和执行算数运算等功能的符号。 JavaScript中常用的运算符有: 算数运算符递增和递减运算符比较运算符逻辑运算符赋值运算符 1.2 算数运算符 算术运算符概述 概念:算术运算使用的符号,用于执行两个变量或值的算术运算。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6YhcqWN3-1580991278482)(images\图片1.png)] 浮点数的精度问题 浮点数值的最高精度是 17 位小数,但在进行算术计算时其精确度远远不如整数。 var result = 0.1 + 0.2; // 结果不是 0.3,而是:0.30000000000000004 console.log(0.07 * 100); // 结果不是 7, 而是:7.000000000000001 所以:不要直接判断两个浮点数是否相等 ! 表达式和返回值 表达式:是由数字、运算符、变量等以能求得数值的有意义排列方法所得的组合 简单理解:是由数字、运算符、变量等组成的式子 表达式最终都会有一个结果,返回给开发者,称为返回值 1.3 递增和递减运算符 递增和递减运算符概述 如果需要反复给数字变量添加或减去1,可以使用递增(++)和递减( – )运算符来完成。 在
  • Post-Incrementing/decrementing in recursive method calls (Java)
    Say you have a recursive method, and you post-increment/decrement a value in the recursive call. Why will this result in a stack overflow exception when a pre-increment/decrement will not? Ex. numberCount(currentNumber++); //Stack overflow exception numberCount(++currentNumber); //No stack overflow exception Thanks in advance for any clarification.
  • js学习笔记(2)——JavaScript运算符以及优先级
    运算符 运算符也被称为操作符,是用于实现赋值、比较和执行算数运算等功能的符号 - 算数运算符 注意点:1)% 取余(取模) 2)浮点数值的最高精度是17位小数,但在进行算术计算时其精度远远不如整数。 <script> //1.% 取余 取模运算 console.log(5 % 3); //2. 浮点数 算数运算里面会有问题 console.log(0.1 + 0.2);//0.30000000000000004 console.log(0.07 * 100);//7.000000000000001 //3.我们不能拿着浮点数进行比较 是否相等 var num = 0.1 + 0.2; console.log(num == 0.3);//false </script> 表达式和返回值 表达式:是由数字、运算符、变量等以能求得数值的有意义排列方法所得的组合。(简单理解:由数字、运算符、变量组成的式子) 返回值:表达式有一个返回的值递增和递减运算符 概述:如果需要反复给数字变量添加或减去1,可以使用递增(++)和递减(- -)运算符来完成 (++)和(- -)可以放在变量的前面,也可以放在变量的后面,放在变量前面称为前置递增(递减)运算符,放在后面称为后置递增(递减)运算符。 注意点:必须要和变量配合使用 <script> //1.想要一个变量加一 var num = 1; num =
  • Javascript入门(二)JavaScript运算符、算术运算符、赋值运算符、关系运算符、逻辑运算符及优先级
    JavaScript运算符 算术运算符赋值运算符关系(比较)运算符逻辑运算符运算符的优先级 算术运算符 算术运算符用在数学表达式中, 它的使用方式和数学中也是一致的. 算术运算符是对数据进行计算的符号可以直接对数据进行操作, 也可以操作变量指向的数据. JavaScript支持:自增++和自减–,通常都是用在数字变量上 自增:++ 分为前置自增和后置自增自减:– 分为前置自减和后置自减 总结:前置先算符后使用,后置先使用后计算 <script> // 1.自增 var num1 = 100; num1++;//++后置写法 ++num1;//++前置写法 console.log(num1); // 2.自减 var num2 = 100; num2--;//--后置写法 --num2;//--前置写法 console.log(num2); // 3.前置与后置的区别:参与运算的时候有区别 //num++: 先使用,然后再+1; //++num:先自身+1,再使用 var num = 100; // var result = num++ +10; // console.log(num);//101 // console.log(result);//110 var result = ++num +10; console.log(num);//101 console.log(result
  • javascript学习笔记---ECMAScript运算符(一元运算符)
    一元运算符只有一个参数,即要操作的对象或值。它们是 ECMAScript 中最简单的运算符。 delete delete 运算符删除对以前定义的对象属性或方法的引用。例如: var o = new Object; o.name = "David"; alert(o.name); //输出 "David" delete o.name; alert(o.name);//输出 "undefined" if(o.name === null) { alert("未声明") }else if(o.name === undefined) { alert("un ="); //un = } 在这个例子中,删除了 name 属性,意味着强制解除对它的引用,将其设置为 undefined(即创建的未初始化的变量的值)。 delete 运算符不能删除开发者未定义的属性和方法。例如,下面的代码将引发错误: delete o.toString; 即使 toString 是有效的方法名,这行代码也会引发错误,因为 toString() 方法是原始的 ECMAScript 方法,不是开发者定义的。 void void 运算符对任何值返回 undefined。该运算符通常用于避免输出不应该输出的值 前增量/前减量运算符,后增量/后减量运算符 --iNum;  iNum--;  ++iNum;  iNum++
  • PHP 中的运算符 = 与 ==(Operators = vs. == in PHP)
    问题 我正在从一本书中学习基本的 PHP,从我读到的内容来看, =是一个赋值运算符,而==是一个比较运算符。 所以... $x = 5; $x == 5: true ...说得通。 然而,这本书给出了一个让我困惑的例子: if (++$x == 10) echo $x; 为什么==? 我们不是想说“如果 ++$x 等于 10,则 echo $x”...? 然后看起来像:if (++$x = 10)。 前者就像在条件语句中问一个问题,这将是不合逻辑或多余的。 回答1 ==表示相等,所以条件读作: 如果预先增加的$x等于 10,则回显$x Single =是赋值,其中一个变量被设置为包含一个值: $word = 'hello'; $number = 5; // etc. echo "I said $word $number times!"; 关于增量运算符: 在学习 PHP(和/或其他语言)时,您会看到++$x和$i--类的东西。 这些是递增/递减运算符。 当他们定位相对于他们在经营上的变化是非常重要的。 如果它们被放置在变量之前,比如++$x ,它是一个预增量/减量。 这意味着在对变量执行任何其他操作之前执行操作。 如果它放在之后,比如$x++ ,它是一个后递增/递减,这意味着操作是在之后执行的。 在示例脚本中最容易看到: $x = 5; echo ++$x; // 6 echo
  • 为什么有些运算符只能重载为成员函数,而其他不能重载为朋友函数,而其余的都重载为成员函数?(Why can some operators only be overloaded as member functions, other as friend functions and the rest of them as both?)
    问题 为什么有些运算符只能重载为成员函数,而另一些则重载为非成员的“自由”函数,而其余的全部都重载? 这些背后的原理是什么? 如何记住哪些运算符可以重载(成员,免费或两者都重载)? 回答1 该问题列出了三类运算符。 我认为,将它们放到列表上有助于理解为什么一些运算符在可以重载的地方受到限制: 必须重载为成员的运算符。 这些相当少: 赋值operator=() 。 允许非成员作业似乎为操作员劫持作业打开了大门,例如,通过重载不同版本的const资格证书。 考虑到赋值运算符是相当基本的,这似乎是不可取的。 函数调用operator()() 。 函数调用和重载规则本身已经足够复杂。 通过允许非成员函数调用运算符来进一步复杂化规则似乎不明智。 下标operator[]() 。 使用有趣的索引类型似乎会干扰对运算符的访问。 尽管几乎没有劫持过载的危险,但是似乎并没有太大收获,但是编写高度不明显的代码很有意思。 类成员访问operator->() 。 临时而言,我看不到任何重载此非成员运算符的严重滥用。 另一方面,我也看不到任何东西。 而且,类成员访问运算符具有相当特殊的规则,并且玩弄可能干扰这些规则的重载似乎是不必要的麻烦。 尽管可以想象每个成员都是非成员(尤其是在数组/指针上工作的下标运算符,它们可以在调用的任一端)都是重载,但是,例如,如果一个分配可以被劫持,这似乎很令人惊讶
  • 详细的JavaScript基础语法-上-简单数据类型、运算符、流程控制、循环、数组、
    JS简介 JS与标记语言的区别 js是有逻辑性的、是有指令的、是主动的。 标记语言(html)不需要向计算机发出指令、标记语言的存在是用来被读取的, 是被动的。 浏览器的执行 渲染引擎:用于解析html与css ja引擎:又称js解释器、用于读取网页中的JS代码 注:浏览器本身并不会执行JS代码,而是通过内置 JavaScript 引擎(解释器) 来执行 JS 代码 。JS 引擎执行代码时逐行解释每一句源码(转换为机器语言),然后由计算机去执行,所以 JavaScript 语言归为脚本语言,会逐行解释执行。 JS的组成: ECMAScript、dom、bom JS的输出语句 alert(‘msg’) 弹出框 console.log() 控制台打印 prompt(‘msg’) 弹出输入框 js的变量 变量就是内存中用于存放数据的空间、 变量的使用: 声明与赋值 age为声明、18为赋值 var age = 18; 变量的规范 规则: 由字母(A-Za-z)、数字(0-9)、下划线(_)、美元符号( $ )组成,如:usrAge, num01, _name严格区分大小写。var app; 和 var App; 是两个变量不能 以数字开头。 18age 是错误的不能 是关键字、保留字。例如:var、for、while变量名必须有意义。 MMD BBD nl → age遵守驼峰命名法
  • 最新最全的微信小程序入门学习教程,微信小程序零基础入门到精通
    写在前面 1,讲解视频 视频课我会在B站免费提供给大家,欢迎关注,欢迎三连。 https://space.bilibili.com/419474640/video 2,配套笔记 配套笔记会在csdn上免费给到大家,欢迎关注,笔记会持续更新。 https://blog.csdn.net/qiushi_1990 3,支持石头哥😊 3-1,源码和配套资源获取 目前源码和配套的一些资源暂时不免费,如果有需要的同学可以私聊石头哥,拿米来换。 3-2,笔记电子书 笔记我也有整理一套电子书,大家也可以私聊石头哥获取电子书版的配套笔记。电子书笔记方便后期查询知识点。 4,问题解答(●’◡’●) 另外石头哥提供配套解答服务。当然了,知识付费时代石头哥解答是要米的,毕竟石头哥精力有限,石头哥也是要吃面包的。石头哥有推出包月,包年解答服务。你在学习过程中有任何问题,或者工作中遇到任何编程问题,都可以来找石头哥 石头哥目前可以解答如下问题 小程序方面的问题云开发方面的问题Java,springboot,Javaweb方面的问题毕设方面的问题安卓app开发方面的问题html+css+JavaScript方面的问题前端开发的问题后端开发的问题面试找工作方面的问题 从今天开始就来带领大家学习微信小程序了,只要你跟着我一步步来,相信你也可以上线一款属于自己的微信小程序。 一,认识小程序 微信⼩程序,简称⼩程序,英