C++技术问题:如何使用指针填充数组?
如何用指针填充C++数组tab2?
指针刚接触的时候确实容易让人头大,我当初学的时候也卡了好一阵!别着急,我用一个可运行的完整例子,再一步步给你拆解怎么用指针填充数组tab2,保证你能看明白。
核心概念先理清楚
首先要记住:数组的名字本质上就是指向数组第一个元素的指针。比如你定义int tab2[5];,tab2本身就代表了tab2[0]的内存地址。我们可以用指针来遍历数组的每一个元素,然后给它们赋值。
可运行的示例代码
#include <iostream> int main() { // 1. 定义一个待填充的数组tab2,这里我们设大小为5 int tab2[5]; // 2. 定义一个指针,让它指向数组的第一个元素 int* ptr = tab2; // 3. 用指针循环填充数组,赋值1到5 for (int i = 0; i < 5; ++i) { // 解引用指针,给当前指向的数组元素赋值 *ptr = i + 1; // 让指针向后移动一位,指向下一个数组元素 ptr++; } // 4. 打印数组,验证填充结果 std::cout << "填充后的tab2数组:"; for (int num : tab2) { std::cout << num << " "; } std::cout << std::endl; return 0; }
运行这段代码,你会看到输出:填充后的tab2数组:1 2 3 4 5
逐行拆解关键步骤
int* ptr = tab2;:把数组tab2的首地址赋值给指针ptr,现在ptr和tab2指向同一个位置——也就是tab2[0]的内存地址。*ptr = i + 1;:这里的*是解引用操作符,意思是“访问指针指向的内存地址里的内容”。简单说,*ptr就等价于当前指针指向的数组元素(第一次循环时就是tab2[0],第二次是tab2[1],以此类推),我们直接给它赋值就行。ptr++;:让指针向后移动一个int类型的大小(在大多数系统里是4字节),这样下一次循环时,ptr就会指向数组的下一个元素。这就是指针遍历数组的核心逻辑!
另一种更“指针风格”的写法
如果你不想用计数器i,还可以通过指针的范围来控制循环,更能体现指针的特性:
#include <iostream> int main() { int tab2[5]; int* current = tab2; // 指向数组起始位置 int* end = tab2 + 5; // 指向数组最后一个元素的下一个位置(作为循环终止条件) int value = 1; while (current != end) { *current = value++; current++; } // 打印验证 std::cout << "填充后的tab2数组:"; for (int num : tab2) { std::cout << num << " "; } std::cout << std::endl; return 0; }
这里tab2 + 5的意思是:从数组首地址往后偏移5个int的大小,指向数组末尾的下一个位置。当current移动到这个位置时,循环就停止,这样我们不需要依赖计数器,写法更贴近指针的本质。
关键要点总结
- 指针存储的是内存地址,数组名就是数组首元素的地址。
- 解引用
*ptr可以读取或修改指针指向的内存内容。 - 指针的加减操作是按类型大小偏移的:比如
int*每次+1会移动4字节,char*每次+1移动1字节,刚好对应元素的大小。
内容的提问来源于stack exchange,提问作者lavr2004
相关产品推荐
相关产品推荐

