C语言指针调用函数问题,急求解释(本题是《c和指针》上的题目)

2025-05-18 03:02:09
推荐回答(1个)
回答1:

我不清楚你的疑问到底指哪些。我就你写的这些代码解读:
int read_column_numbers(int columns[], int max)函数功能:
传参数组首地址,及数组最大长度。
用户输入max个整数,只保存其中的正整数(负数忽略),如果正整数的个数是偶数则返回个数。否则程序结束。
void rearrange(char *output,char const *input,int n_columns, int const columns[])函数功能:
传参 数组output首地址 , 数组input首地址 ,用户输入正整数个数,正整数数组
迭代数组,根据用户的输入的数字作为input起始下标,复制并拼接到数组output中(具体逻辑我不研究了)。
strncpy(output + output_col,input + columns[col],nchars)这里就是就是拼接复制,变量output_col记录的是output 已保存字符长度,output + output_col就是每次接在已有字符后面放复制的字符。input + columns[col]是用户输入的数字作为起始位置的偏移量取nchars个字符复制到output 中。
总结:
一、
首先数组名作为参数传递,无论形参定义是指针还是数组(int *columns 和 int columns[ ]效果是一样的),最终都是传地址。
二、
数组形参定义char const *,修饰符const表示常量不可修改,这里const修饰的是*input,表示数组指针指向的地址内容不能修改,但是数组指针本身值可以修改。也就是说函数中可以改变input指向的地址(比如input++),但是不能改变其指向的值(比如input[0]='A')。