C 外部变量的使用
书中看到这样一段目前仅仅根据自己的理解mark一下,说不定理解的不正确。
外部变量似乎和全局变量是差不多一个意思的(函数中的局部变量在C中称作自动变量)。
外部变量必须定义在所有函数之外,且只能定义一次,这点很好理解,变量自然是唯一的,在每个需要访问外部变量的函数中,必须声明相应的外部变量,此时说明其类型。
显示声明用extern
,某些情况下可以省略,那就是外部变量的定义出现在他所使用的函数前(先定义在使用,我觉得在正常不过)。
举个例子:
书中看到这样一段目前仅仅根据自己的理解mark一下,说不定理解的不正确。
外部变量似乎和全局变量是差不多一个意思的(函数中的局部变量在C中称作自动变量)。
外部变量必须定义在所有函数之外,且只能定义一次,这点很好理解,变量自然是唯一的,在每个需要访问外部变量的函数中,必须声明相应的外部变量,此时说明其类型。
显示声明用extern
,某些情况下可以省略,那就是外部变量的定义出现在他所使用的函数前(先定义在使用,我觉得在正常不过)。
举个例子:
这是K&R中的一道题目:
编写一个函数reverse(s),将字符串s中的字符顺序颠倒过来。使用该函数编写一个程序,每次颠倒一个输入行中的字符顺序。
在PHP中曾经做过类似的题,见PHP 实现中文字符串截取无乱码,同样也是写reverse()
函数,我相信C中也有现成的函数,因为编译器高亮颜色不一样。
输出示例:
hello
olleh
each()
在一篇文章看到的时候第一反应:有点印象,但具体是干什么的已经记不起来了,查了手册之后:
返回数组中当前的键/值对并将数组指针向前移动一步
和next
的区别估计就在于是否返回值了,一个是键值对,一个是值,并且next()
中有一句话:
Note: 你将无法区别包含数组尾以及 boolean FALSE 单元的数组。要正确遍历可能含有空单元或者单元值为 0 的数组,参见 each() 函数。
看来next()
有一定限制条件。
导言中的题目,昨天我勉强算实现了输出,不过效果其实很糟糕,还是没有考虑今天发的那几个问题,下载好答案之后就看了看,题目意思也明白了:
原话:
编写一个程序,打印输入中单词长度的直方图。水平方向的直方图比较容易,垂直方向的直方图则要困难一些。
实际上,他是要统计,比如hello
有5个字母,我只输入hello
那么5中就输出1,类似的hello world
在5中就输出2
我当时实际上只是很简单的直方图了,而没有考虑本身,所以是个错误的答案。
同时我还在想,我怎么知道单词有多长呢——答案很好的解决了这个问题。
还是手贱去买了那个域名,接下来我们要做的就是更换那些连接了,如果不使用SQL,更换是非常费劲的一件事情,而现在可以用语句来解决了,首先找到大致的位置,比如这次,我们找到数据库的表typecho_contents
里记录的就是文字内容,可是如果用UPDATE ... WHERE ..=..
用的是完全匹配,要用LIKE吗?我以前似乎也不是这样做的,去看了一下以前搬家的博文,看到了replace()
,如法炮制。
Update 表名 SET 要替换的列=REPLACE(要替换的列,被替换的字符,替换后的字符)
于是用
UPDATE typecho_contents set text=replace(text, 'test.xsky.me', 'test.codesky.me');
UPDATE typecho_options set text=replace(value, 'learn.xsky.me', 'codesky.me');
UPDATE typecho_contents set text=replace(text, 'learn.xsky.me', 'codesky.me');
貌似以前也看到有一道题是这样的,这里发现了思维不够严密,比如我是这么写的:
#include <stdio.h>
#define IN 1
#define OUT 0
main(void)
{
int c, state;
while ((c = getchar()) != EOF) {
if (c == '\t' || c == ' ')
printf("\n");
else
putchar(c);
}
return 0;
}
做到这样一题,是将其中多个空格替换为一个空格,回想起来PHP也有类似需求,暂时先mark一下这个方法。
我的想法是根据空格前面是否存在空格来控制空格的输出。(书中答案貌似更简练一些,直接加一个变量记录这次输出的值,用那个值来对比)
#include <stdio.h>
int space = 0;
int c;
main(void)
{
while ((c = getchar()) != EOF) {
if (c == ' ' && !space) {
space = 1;
putchar(c);
} else if (c != ' ') {
space = 0;
putchar(c);
}
}
return 0;
}
PHP中可以用转为数组-删除数组空白元素-转为字符串的方法,首尾部分空格可以用trim()
处理
一般我们用完unset()
以后,数组元素对应的索引是不变的,这样有时候就会给我们带来一些麻烦,所以配合array_values()
使用来重组数组,这是在写C的时候突然想到没记下来的,就补充一下。