提问人:Alessandro Argentini 提问时间:11/12/2023 更新时间:11/12/2023 访问量:46
在 C 中通过引用传递的指针和参数的工作
Working of pointers and parameters passing by reference in C
问:
我的 C 编程背景非常薄弱,在学校学习了非常基础的 C 语言后,我刚刚重新开始用 C 编程。
我正在用指针做练习,以了解我对它们的掌握程度,我想写一个非常简单的 C 函数,它接受 3 个参数,一个字符串,它的 dim 和另一个字符串,然后反转它们。
我的代码如下:
void inverter (char* cstringa, int dim, char* inversion) {
printf("%d\n", dim);
for (int i = 0; i < dim; i++) {
cstringa++;
}
for (int i = 0; i < dim; i++) {
*inversion = *cstringa;
printf("%c", *inversion);
inversion++;
cstringa--;
}
}
主要:
char stringa1[11] = {'A', 'l', 'e', 's', 's', 'a', 'n', 'd', 'r', 'o', '\0'};
char* pstringa1 = stringa1;
char inversione[strlen(stringa1)];
inversione[0] = '\0';
char* pinversione = inversione;
inverter(stringa1, strlen(stringa1), inversione);
for(int i = 0; i < strlen(inversione); i++) {
printf("%c", *pinversione);
pinversione++;
}
我希望这段代码能反转我的字符串(string1=cstringa,它的dim=dim,string2=inversion),但它没有这样做,因为值没有像我给他时所期望的那样存储在inversione中inversione的第一个单元格的内存地址。为什么会这样?
我还注意到,当我在逆变器功能中逐个字符打印倒置的字符串时,它不会打印最后一个字母“A”,尽管尺寸和循环设置都是正确的。为什么?
感谢您的耐心等待。
我希望在输出中得到第一个字符串的反转,并且通过引用传递的参数运行正常。
答:
0赞
Weather Vane
11/12/2023
#1
原因是因为你前进指向终结者,所以你需要移动到第二个循环的开头。cstringa++;
cstringa--;
另一个问题是在你没有设置最终终止符的地方使用,所以也需要将其添加到函数中。strlen(inversione)
#include <stdio.h>
void inverter (char* cstringa, int dim, char* inversion) {
printf("%d\n", dim);
for (int i = 0; i < dim; i++) {
cstringa++;
}
for (int i = 0; i < dim; i++) {
cstringa--; // reposition
*inversion = *cstringa;
printf("%c", *inversion);
inversion++;
}
*inversion = 0; // terminate
printf("\n");
}
int main(void)
{
char stringa1[11] = {'A', 'l', 'e', 's', 's', 'a', 'n', 'd', 'r', 'o', '\0'};
char* pstringa1 = stringa1;
char inversione[strlen(stringa1) + 1]; // allow for terminator
inversione[0] = '\0';
char* pinversione = inversione;
inverter(stringa1, strlen(stringa1), inversione);
for(int i = 0; i < strlen(inversione); i++) {
printf("%c", *pinversione);
pinversione++;
}
return 0;
}
输出:
10
ordnasselA
ordnasselA
评论
0赞
Weather Vane
11/12/2023
请注意,代码将更容易键入(和阅读)char stringa1[] = "Alessandro";
下一个:在 C 函数中修改三维数组
评论
strlen
strlen
%s
printf