公开学习文档

公开学习文档


个人

<h2>基础</h2> <pre><code class="language-c">// -1 存储方式:0xffffffff // 几种相同的定义 int*p,q; int* p,q; int *p,q; // 本质上都是下面的定义: int *p; int q; void *p; sizeof(p) // 存储指针所占用的空间大小 char list[1024]; sizeof(list) == 1024 sizeof(&amp;quot;hello&amp;quot;) = 6 strlen(&amp;quot;hello&amp;quot;) = 5 p++ // p 本身加上类型的大小,在 gcc 中 void* 可以自增,变化大小为 1 printf() // 参数是从右往左压栈的 int a = 1; (int&amp;amp;)a == *(int *)&amp;amp;a // 判断是否是2的n次方 !(x &amp;amp; (x - 1)) // 用const修饰的变量必须在声明时进行初始化 const int n=5; const char *p; // 正确(注意这种为什么是正确的),因为这里 const 是修饰 p 指向的变量,而不是指针变量 p 本身 int const a == const int a; int const *p != int * const p // 下面的程序最后输出的是 10,10,9,0。 void main(){      int x=10; int y=10, i;      for (i = 0; x &amp;gt; 8; y = i++){          printf(&amp;quot;%d,%d,&amp;quot;, x--, y);      } } *p++ // 后置++优先级高于*取值运算符,所以运算后,p会加上一个类型长度的地址 (*p)++ char **p; p++;     //这里自增以后,p在数值上加了一个sizeof(指针)的数字 scanf(&amp;quot;%s&amp;quot;,s); //如果有空格,就会结束 gets(s); //可以接收含空格的字串,不安全 //交换值 a=a^b; b=a^b; a=a^b; // 假定 sizeof(int) = 4; // (unsigned) int a = 0x01; 则: a &amp;lt;&amp;lt; 32 == a &amp;lt;&amp;lt; 0 == 1; a &amp;lt;&amp;lt; 33 == a &amp;lt;&amp;lt; 1 == 2; // struct 对齐 struct s_t { char a; short b; int c; }; printf(&amp;quot;%d\n&amp;quot;, sizeof(struct s_t) // 输出 8 </code></pre> <h2>其它</h2> <ul> <li>i++用完i之后立马更新i的值。与for循环区别</li> <li>类型提升:long double &gt; double &gt; float</li> <li>#define 没有分号,注意加括号</li> <li>&amp;引用?</li> <li>结构体的长度一定是最长数据元素的整数倍。n 字节的元素,它的地址能被 n 整除。</li> <li>注意 || 和 &amp;&amp; 的短路</li> <li>数组名是一个常量,与指针不同。</li> <li>在VC++6.0中,void类型指针不能++</li> </ul> <h2>数组名</h2> <p>假设 int a[3]</p> <ol> <li>a 和 &amp;a 在数值上相等</li> <li>&amp;a 是数组指针,指向一个数组,所以 +1 就是加一个数组,大小就是指针的大小</li> <li>a 是啥?</li> </ol> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=fd60fcfe54e390955e2beb196fef9c7c&amp;amp;file=file.png" alt="" /></p>

页面列表

ITEM_HTML