周立功C试题解析:指针与数组深度理解

5星 · 超过95%的资源 需积分: 10 53 下载量 72 浏览量 更新于2024-09-13 收藏 34KB DOC 举报
“周立功高级C试题,内部测试题,华为C语言笔试题” 在C语言编程中,理解和掌握指针、数组以及它们之间的关系至关重要。本文将针对提供的试题进行解析,并深入探讨相关知识点。 首先,让我们分析第一道题目: ```c int arr[]={6,7,8,9,10}; int* ptr=arr; *(ptr++)+=123; printf("%d,%d", *ptr, *(++ptr)); ``` 这道题目考察的是指针操作和数组元素的修改。初始时,`ptr` 指向 `arr` 的第一个元素。`*(ptr++)+=123;` 表示先取 `ptr` 指向的值(即6),然后加上123(变为129),并将结果存回原地址,因此 `arr[0]` 变为129。接下来,`*(++ptr)` 先使 `ptr` 自增,指向 `arr[1]`(即7),然后取其值。所以输出为8,8。这是因为自增操作符 `++` 有不同的前缀和后缀形式,这里使用的是后缀自增,先使用再自增。 接下来是关于 `sizeof` 运算符的问题: ```c char str[]="http://www.ibegroup.com/"; char *p=str; int n=10; ``` 1. `sizeof(str)`:计算字符串常量的大小,包括结束符`\0`,所以为17。 2. `sizeof(p)`:`p` 是一个指针,无论指针类型,其大小通常为4(对于32位系统)或8(对于64位系统),这里是4。 3. `sizeof(n)`:`n` 是一个 `int` 类型变量,其大小为4。 4. 在函数 `Foo` 内部,`str` 被当作一个参数传递,此时 `str` 是一个局部变量,其大小取决于指针的大小,即4。 5. `sizeof(p)`:分配了100字节的内存,但指针 `p` 本身的大小仍然是4。 `sizeof` 运算符用于计算对象的大小,对于数组,它返回数组所占的字节数;对于指针,它返回指针变量的大小;对于基本类型,如 `int`,它返回该类型的字节数。 接着是各种声明的含义: a) `inta;`:声明一个整型变量 `a`。 b) `int*a;`:声明一个指向整型数的指针 `a`。 c) `int**a;`:声明一个指向指针的指针 `a`,该指针指向的指针又指向整型数。 d) `inta[10];`:声明一个包含10个整型数的数组 `a`。 e) `int*a[10];`:声明一个包含10个指针的数组 `a`,每个指针指向整型数。 f) `int(*a)[10];`:声明一个指向包含10个整型数数组的指针 `a`。 g) `int(*a)(int);`:声明一个指向函数的指针 `a`,该函数接受一个整型参数并返回一个整型数。 h) `int(*a[10])(int);`:声明一个包含10个函数指针的数组 `a`,每个指针指向的函数接受一个整型参数并返回一个整型数。 这些声明展示了C语言中复杂的指针和数组用法,以及函数指针的概念。理解这些概念对于编写高效且无误的C程序至关重要。 这些试题涵盖了C语言的基础和高级特性,包括指针操作、数组处理、`sizeof` 运算符的应用以及不同类型的声明。通过深入理解和实践这些题目,开发者可以提升对C语言的掌握程度,特别是对于指针的灵活运用,这对于理解和解决实际编程问题具有重要意义。