<?xml version="1.0" encoding="gbk"?>
<rss version="2.0">
  <channel>
    <title>曲径通幽论坛 - 『 C 』</title>
    <link>http://www.groad.net/bbs/forum.php?mod=forumdisplay&amp;fid=30</link>
    <description>Latest 20 threads of 『 C 』</description>
    <copyright>Copyright(C) 曲径通幽论坛</copyright>
    <generator>Discuz! Board by Comsenz Inc.</generator>
    <lastBuildDate>Mon, 25 May 2026 20:22:40 +0000</lastBuildDate>
    <ttl>60</ttl>
    <image>
      <url>http://www.groad.net/bbs/static/image/common/logo_88_31.gif</url>
      <title>曲径通幽论坛</title>
      <link>http://www.groad.net/bbs/</link>
    </image>
    <item>
      <title>左值和右值</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=7912</link>
      <description><![CDATA[变量的名称为左值(lvalue)，因为它们可以在赋值运算符的左边使用。

常量称为右值 (rvalue)，因为它们只能在赋值运算符的右边使用。

请注意，左值还可以用作右值，但反过来绝对不成立。]]></description>
      <category>『 C 』</category>
      <author>easy</author>
      <pubDate>Wed, 24 Jul 2013 09:35:18 +0000</pubDate>
    </item>
    <item>
      <title>函数指针的数组</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=7873</link>
      <description><![CDATA[我们可以如下形式声明一个函数指针的数组：

各个数组元素分别初始化为列表中对应的函数地址。比如，为了使用数组 ...]]></description>
      <category>『 C 』</category>
      <author>beyes</author>
      <pubDate>Thu, 04 Jul 2013 17:03:59 +0000</pubDate>
    </item>
    <item>
      <title>不要以为赋值语句肯定为真</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=7245</link>
      <description><![CDATA[很多时候在写 if 判断时，误将 \'==\' 写成 \'=\' ，即逻辑等判断符号写成了赋值符号，最后都去执行了判断为真的语句，于是有许多人就会以为，赋值语句肯定是为真的，但这是错的，如果是用 0 来赋值，那么 if 判断仍然为假，比如下面程序所示：
[mw_shl_code=cpp,true]#incl ...]]></description>
      <category>『 C 』</category>
      <author>张无忌</author>
      <pubDate>Sat, 30 Jun 2012 03:26:16 +0000</pubDate>
    </item>
    <item>
      <title>int const *p 与 int * const p 的区别</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=5936</link>
      <description><![CDATA[int const *p 和&#160;&#160;int * const p 看着类似，但着实有区别。

int const *P 表示 p 指向的整数值不能改变；而 int *const p 表示指针 p 不能改变。

测试代码一：
[mw_shl_code=cpp,true]#include 


int main()
{
&#160;&#160;&#160;&#160;int val = 10;
&amp;#16 ...]]></description>
      <category>『 C 』</category>
      <author>beyes</author>
      <pubDate>Thu, 12 Jan 2012 13:28:53 +0000</pubDate>
    </item>
    <item>
      <title>printf() 控制宽度中的 * 符号</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=5826</link>
      <description><![CDATA[printf() 函数里的的控制宽度符号如 “%k.ms” 中的 k 表示预设输出字符的总长度，而 m 表示控制输出字符串的自身长度。往往这两个值，我们可以先写好，但是如果希望不直接接写死该值，那么它们可以用 * 符号来代替。

测试代码：
 [mw_shl_code=cpp,true]#include 

in ...]]></description>
      <category>『 C 』</category>
      <author>beyes</author>
      <pubDate>Mon, 02 Jan 2012 07:02:46 +0000</pubDate>
    </item>
    <item>
      <title>sizeof 的使用场合与 strlen 的区别</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=5273</link>
      <description><![CDATA[sizeof 的主要使用场合：
 1. sizeof 一个主要用途是与 存储分配 和 I/O系统 那样的例程进行通信，比如：

 
2. 用 ...]]></description>
      <category>『 C 』</category>
      <author>beyes</author>
      <pubDate>Fri, 18 Nov 2011 02:00:35 +0000</pubDate>
    </item>
    <item>
      <title>#pragma pack 与 __attribute__ ((packed))</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=5262</link>
      <description><![CDATA[在默认情况下，数据一般都是以 4 字节对齐的(32 位机)。

同一个程序分别使用 VC 和 GCC 来编译都可以得到相同的结果：
[mw_shl_code=cpp,true]#include 

struct temp3 {
        char a1;
        int a2;
} C;
int main()
{
        printf (\&quot;%d\\n\&quot;, sizeof(C));

   ...]]></description>
      <category>『 C 』</category>
      <author>beyes</author>
      <pubDate>Wed, 16 Nov 2011 11:57:44 +0000</pubDate>
    </item>
    <item>
      <title>面试题目集锦[宏定义,预处理,const,sizeof]</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=5260</link>
      <description><![CDATA[定义一个宏 FIND 求一个结构体 struc 里某个变量相对 struc 的偏移量。

宏：


说明：
(struc *)0 表示将常量 0 强制转化为 struc * 型指针，我们可以认为，所声明的 struc 类 ...]]></description>
      <category>『 C 』</category>
      <author>beyes</author>
      <pubDate>Wed, 16 Nov 2011 06:56:17 +0000</pubDate>
    </item>
    <item>
      <title>面试题目集锦[基本概念]</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=5234</link>
      <description><![CDATA[赋值语句-1：
下面程序输出的结果是什么？
[mw_shl_code=cpp,true]#include 
using namespace std;


int i = 1;


int main()
{
&#160;&#160;&#160;&#160;int i = i;
&#160;&#160;&#160;&#160;
&#160;&#160;&#160;&#160;cout]]></description>
      <category>『 C 』</category>
      <author>beyes</author>
      <pubDate>Sat, 12 Nov 2011 11:45:42 +0000</pubDate>
    </item>
    <item>
      <title>wchar_t 类型</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=4603</link>
      <description><![CDATA[wchar_t 是 C/C++ 的字符数据类型，是一种扩展的字符存储方式，不等同于Unicode编码，它用来显示更多的字符集。wchar_t 数据类型一般为16位或32位，但不同的 C 或 C++ 库有不同的规定。在 GNU LIBC 中 wchar_t 被规定为 32 位。


如再 linux 中，在使用 wchar_t 之前， ...]]></description>
      <category>『 C 』</category>
      <author>beyes</author>
      <pubDate>Mon, 05 Sep 2011 04:08:11 +0000</pubDate>
    </item>
    <item>
      <title>全局数组变量和局部数组变量的访问越界问题</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=4264</link>
      <description><![CDATA[有 1 小段程序如下：

上面程序中声明了 1 个全局数组变量，且有 50 个元素。但在 main() ...]]></description>
      <category>『 C 』</category>
      <author>beyes</author>
      <pubDate>Fri, 05 Aug 2011 17:54:03 +0000</pubDate>
    </item>
    <item>
      <title>GNU C 中的 void 类型指针</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=4240</link>
      <description><![CDATA[按照 ANSI 标准，不能对 void 类型指针进行算法操作，如不能：


但在 GNU C 中却可以，编译时不会报错，在运行中很可能会出现逻辑错误，因为在 GNU C 中 void 型指针是按照 char * 类型来运算的。比较下面代码：
[mw_shl_code=cpp,true]#include 

int main()
{
    in ...]]></description>
      <category>『 C 』</category>
      <author>beyes</author>
      <pubDate>Mon, 01 Aug 2011 06:47:23 +0000</pubDate>
    </item>
    <item>
      <title>指针数组初始化问题</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=4239</link>
      <description><![CDATA[对一个指针数组初始化时，最好不要声明数组元素的个数刚好等于实际给出的初始化个数。这样容易造成读取数组越界，从而读出乱码，比如下面代码：
[mw_shl_code=cpp,true]#include 

int main(void)
{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;const char *pat[3 ...]]></description>
      <category>『 C 』</category>
      <author>beyes</author>
      <pubDate>Sat, 30 Jul 2011 09:55:33 +0000</pubDate>
    </item>
    <item>
      <title>在宏中对指针使用 &#39;#&#39; 符号</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=4216</link>
      <description><![CDATA[在宏中对指针参数前加上 \'#\' 符号，这样可以表示该指针的出处，比较下面代码：
[mw_shl_code=cpp,true]#include 
#include 

void do_nofail(void *ptr, const char *expr)
{
        if(ptr)
                printf (\&quot;Memory allocation good:%s\\n\&quot;, expr);
        e ...]]></description>
      <category>『 C 』</category>
      <author>beyes</author>
      <pubDate>Thu, 28 Jul 2011 02:27:20 +0000</pubDate>
    </item>
    <item>
      <title>linux 下 C 程序(进程) 内存布局</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=3571</link>
      <description><![CDATA[内存管理模块是操作系统的心脏；它对应用程序和系统管理非常重要。今后的几篇文章中，我将着眼于实际的内存问题，但也不避讳其中的技术内幕。由于不少概念是通用的，所以文中大部分例子取自32位x86平台的Linux和Windows系统。本系列第一篇文章讲述应用程序的内存布局。
 ...]]></description>
      <category>『 C 』</category>
      <author>beyes</author>
      <pubDate>Wed, 25 May 2011 11:37:55 +0000</pubDate>
    </item>
    <item>
      <title># -- 字符串创建符号</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=3568</link>
      <description><![CDATA[# 符号是 ISO C 中的字符串创建符号，它经常在宏中使用，以便为一个字符指针变量产生字符串值。

示例代码：
[mw_shl_code=cpp,true]#include 

#define BLACKLIST(name)&#160;&#160;&#160;&#160;print_name(#name)

void print_name(char *name)
{
&#160;&#160;&#160;&amp; ...]]></description>
      <category>『 C 』</category>
      <author>beyes</author>
      <pubDate>Wed, 25 May 2011 03:59:06 +0000</pubDate>
    </item>
    <item>
      <title>C语言与内存分配方式</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=3565</link>
      <description><![CDATA[一般来说，分配方式有以下 3 种：

1.&#160;&#160;从静态存储区域分配
内存在程序编译的时候就已经分配好，这块内存在程序的整个运行期间都存在。例如全局变量，static变量。

2.&#160;&#160;在栈上创建
在执行函数时，函数内局部变量的存储单元都可以在栈上创建，函数 ...]]></description>
      <category>『 C 』</category>
      <author>beyes</author>
      <pubDate>Wed, 25 May 2011 02:07:55 +0000</pubDate>
    </item>
    <item>
      <title>__builtin_prefetch</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=3542</link>
      <description><![CDATA[__builtin_prefetch() 是 gcc 的一个内置函数。它通过对数据手工预取的方法，减少了读取延迟，从而提高了性能，但该函数也需要 CPU 的支持。

该函数的原型为：


其中参数 addr  ...]]></description>
      <category>『 C 』</category>
      <author>beyes</author>
      <pubDate>Wed, 18 May 2011 10:16:29 +0000</pubDate>
    </item>
    <item>
      <title>__context__ 属性</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=3408</link>
      <description><![CDATA[在分析自旋锁代码时，最终跟踪下来，会在 include/linux/compiler.h 中看到下面的代码：
[mw_shl_code=cpp,true]#ifdef __CHECKER__
...
# define __acquire(x)&#160;&#160;&#160;&#160;__context__(x,1)
# define __release(x)&#160;&#160;&#160;&#160;__context__(x,- ...]]></description>
      <category>『 C 』</category>
      <author>beyes</author>
      <pubDate>Wed, 20 Apr 2011 07:37:27 +0000</pubDate>
    </item>
    <item>
      <title>GCC __attribute__ 之 regparm</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=3385</link>
      <description><![CDATA[在 x86 上，regparm 属性会传递一个数值给编译器，这个数值会告诉编译器要用多少个寄存器来传递函数参数(EAX, EDX 或 ECX，最多 3 个寄存器)，通常情况下函数是用堆栈来传递参数的。如果参数比较多，那么其余的参数仍然通过堆栈来传递。

比如我们指定 __attribu ...]]></description>
      <category>『 C 』</category>
      <author>beyes</author>
      <pubDate>Fri, 15 Apr 2011 05:51:35 +0000</pubDate>
    </item>
  </channel>
</rss>