{
p = &str1[i]; q = str2;
while (v != *q && *q == *p) {
++p; ++q; }
if ('\\0' == *q) {
return &str1[i]; } }
return NULL; }
int main( void ) {
char a[] = \
char* p = my_strstr( a, \ if (NULL == p) {
cout << \ } else {
cout << p << endl; }
p = my_strstr( a, \ if (NULL == p) {
cout << \ }
else {
cout << p << endl; }
8.写一个函数,检查字符是否是整数,如果是,返回其整数值。(或者:怎样只用4行代码 ,编写出一个从字符串到长整形的函数?)
析 :扫描一遍,每次生成对应整数的最高位。一行也就搞定了!
//”1234”-? 1*1000+2*100+3*10+4 ?0?---?9? “1234”1234 long convert(char* s_string) { long s_integer=0;
for(int sLen = strlen(s_string), i = 0; i < sLen;s_integer += (s_string[i++] - '0')*pow(10,sLen - i - 1)); return s_integer; }
12 21 23 34 15
2。对1,2,3, 4, 5 这五个数任意取出两个数,列出他们的所有组合。 void main() {
char a[]={'1','2','3','4','5'}; for(int i=0;i<5-1;i++) {
for(int j=i+1;j<5;j++) if(a[i]!=a[j]) {
cout<
cout< //12 21 13 31 14 41 15 51 //23 32 24 42 25 52 //34 43 35 53 //45 54 1 . 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 1) #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等) 2)懂得预处理器将为你计算常数表达式的值,因此,直接写出你是怎么样计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。 3) 意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。 4) 如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点。记住,第一印象很重要。 1). 一个参数既可以是const还可以是volatile吗?解释为什么。 2). 一个指针可以是volatile 吗?解释为什么。 3). 下面的函数有什么错误: int square(volatile int *ptr) { return (*ptr) * (*ptr); } 下面是答案: 1). 是的。一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。 2). 是的。尽管这并不很常见。一个例子是当一个中服务子程序修该一个指向一个buffer的指针时。 3). 这段代码的有个恶作剧。这段代码的目的是用来返指针*ptr指向值的平方,但是,由于*ptr指向一个volatile型参数, 编译器将产生类似下面的代码: int square(volatile int *ptr) { int a,b; a = *ptr; b = *ptr; return a * b; } 由于*ptr的值可能被意想不到地该变,因此a和b可能是不同的。结果,这段代码可能返不是你所期望的平方值!正确的代码如下: long square(volatile int *ptr) { int a; a = *ptr; return a * a; } 9. 嵌入式系统总是要用户对变量或寄存器进行位操作。给定一个整型变量a,写两段代码,第一个设置a的bit 3, 第二个清除a 的bit 3。在以上两个操作中,要保持其它位不变。 #define BIT3 (0x1<<3) static int a; void set_bit3(void) { a |= BIT3; } void clear_bit3(void) { a &= ~BIT3; } 访问固定的内存位置(Accessing fixed memory locations) CC++ Development 10. 嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点。在某工程中, 要求设置一绝对地址为0x67a9的整型变量的值为 0xaa66。编译器是一个纯粹的ANSI编译器。写代码去完成这一任务。 这一问题测试你是否知道为了访问一绝对地址把一个整型数强制转换(typecast)为一指针是合法的。 这一问题的实现方式随着个人风格不同而不同。典型的类似代码如下: int *ptr; ptr = (int *)0x67a9;