logo资料库

C语言练习(指针)及答案.doc

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
10, 20, 30, 40, 50, 60, 70, 80, 90, 100,
习题: 1.根据下面给出的声明和数据,对每个表达式进行求值并写出它的值(如果表达 式未知,注明“未知”)。在对每个表达式进行求值时使用原先给出的值(也 就是说,某个表达式的结果不影响后面的表达式)。假定 ints 数组在内存中 的起始位置是 100,整型值和指针的长度都是 4 个字节。 int ints[20] = { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200}; int *p = ints + 3; = 1) p = 2) p[4] = 3) p + 4 4) *p + 4 = 5) *(p + 4) = 6) p[-2] = = 7) &p = 8) &p[4] 9) &p + 4 = = 10) &p[-2] 112 80 128 44 80 20 未知 128 未知 104 2. 函数指针是如何引用的?(以 void (*comp)(void)为例进行说明。) 函数指针是否可以强制类型转换? 首先,要定义函数指针变量。例如:void (*comp)(void); 其次,要对函数指针变量赋值。例如:comp=func;(func(x)必须先要有定义); 最后,要用 (*指针变量)(参数表),调用函数。例如:(*comp)(x);(x 必须 先赋值)。 不可以。 3.指针 p、整数 n,问:p + n 与 n + p 的结果是否相同? 不相同 4.如果有定义: int *a[10]; int (*b)[10]; sizeof(a), sizeof(b)的值分别是多少; sizeof(a) = 40 sizeof(b) = 4 5.定义以下类型 x: char *x 1)指向字符的指针 2)指向由 13 个字符类型元素组成的一维数组的指针 char (*x)[13] 3)指向字符指针的指针 4)由 13 个指向字符类型对象的指针组成的一维数组 char *x[13] char **x
5) 返回值为指向字符类型的指针的函数,该函数没有参数 char *x() 6) 指向返回值为字符类型的函数的指针,该函数没有参数 char (*x)() 7) 返回值为指向一维数组的指针的函数,该一维数组由指向返回字符类型 的函数的指针组成,函数均没有参数。 char *(*x()[])() 8)由 3 个指向函数的指针组成的一维数组,该函数返回指向由 5 个字符组 成的一维数组的指针。 char (*x[5])()[3] 6.假设一个 float 型数组的起始地址是 1100,每个 float 型占 4 个字节的内 存空间,float *p1 和 float *p2 的值分别是 1112 和 1128,表达式 p2 – p1 等于多少? 16 7.实现库函数 size_t strlen(const char *string); 说明:1)要求提供可编译的 c 源码。 2)要求使用编译测试通过再提交。 3)使用指针方式实现,不要用数组下标。 size_t strlen(const char *string) { int length = 0; if(string == NULL) { return -1; } while(*string++ != ‘\0’) { length += 1; } return length; } 8. 实现函数:int findchar(char **strings, char value);在字符串列表 strings 中查找特定字符 value,返回匹配到的字符串个数。如: 字符串列表: “123ASDFG”, “QWRTYOIA”, ”ZXCVNMG” 查找字符’G’时,返回 2。查找字符 L 时,返回 0。其中字符串列表 strings 是一个指向以 NULL 结尾的指针列表的指针。 int findchar(char **strings, int num, char value) { int counts = 0; if ( strings == NULL || num <= 0 ) { } return counts;
char *pos = NULL; for (int i = 0; i < num; i++) { pos = strings[i]; while (pos = strchr(pos, value)) { pos++; counts++; } } return counts; } int main() { char* s[] = { "123ASDFG","QWRTYOIA","ZXCVNMG" }; int n = findchar(s, 3, 'G'); printf("%d\n", n); return 0; }
分享到:
收藏