谁能给我解释一下这段代码吗?我是C的新手
我正在尝试学习C语言,所以我尝试了C语言中的一些coderbyte挑战,其中之一就是反转字符串。由于语法的原因,在出现多个编译错误后,我试图寻找示例,但在上遇到了这一个谁能给我解释一下这段代码吗?我是C的新手,c,string,reverse,C,String,Reverse,我正在尝试学习C语言,所以我尝试了C语言中的一些coderbyte挑战,其中之一就是反转字符串。由于语法的原因,在出现多个编译错误后,我试图寻找示例,但在上遇到了这一个 #包括 整数字符串长度(字符*); 无效反向(字符*); main() { 字符串[100]; printf(“输入字符串”); 获取(字符串); 反向(字符串); printf(“输入字符串的反面是\%s\”\n,字符串); 返回0; } void reverse(字符*字符串) { int长度,c; 字符*开始,*结束,温
#包括
整数字符串长度(字符*);
无效反向(字符*);
main()
{
字符串[100];
printf(“输入字符串”);
获取(字符串);
反向(字符串);
printf(“输入字符串的反面是\%s\”\n,字符串);
返回0;
}
void reverse(字符*字符串)
{
int长度,c;
字符*开始,*结束,温度;
长度=字符串长度(字符串);
开始=字符串;
结束=字符串;
对于(c=0;c
c甚至不是字符,那么为什么要添加它呢?或者指针是考虑while循环上下文的某种索引吗?根据我的理解,如果字符串是:abcd 结果将是:dcba 如果输入为:HELLO-WORLD 输出将是:DLROW-OLLEH记住
*(指针+c)
相当于指针[c]
。
c
被用作索引。这里的+
运算符并不意味着字符串连接;它意味着指针运算<代码>指针是指向char
的指针,而c
是int
,因此指针+c
会导致指向char
的指针,即c
char在内存中的进一步向前移动。例如,如果有一个数组{j',k',l',m'}
和指针
指向'j'
,并且c
是2,那么指针+c
将指向'l'
。如果像这样推进一个指针,那么遵循它,其作用与数组索引语法相同:pointer[c]
。因此,循环相当于:
while( pointer[c] != '\0' )
c++;
将指针添加到整数(反之亦然)的效果会根据指针(假定)指向的对象的大小进行缩放,因此不需要考虑对象的不同大小
foo+5
,如果foo
是一个指针,则将在内存中向前移动5个对象,无论对象foo
指向什么大小(假设foo
指向它声明指向的类型)。这里您可以讨论指针算法
int a[3] = {1, 3, 6};
printf("%d\n", *(a + 1)); // print 3, look 4 bytes ahead
printf("%d \n", *(a + 2)); //print 6, look 8 bytes ahead
有一个重要的概念:
- 向指针添加一个整数将向前移动指针。要添加的数字将乘以指针所指向类型的大小
int a[3] = {1, 3, 6};
printf("%d\n", *(a + 1)); // print 3, look 4 bytes ahead
printf("%d \n", *(a + 2)); //print 6, look 8 bytes ahead
就你而言:
字符按1字节编码,因此
*(pointer + c) with c == 3
将计算为前面3个字节(3个字符)的内存地址
因此,代码:
while( *(pointer + c) != '\0' )
c++;
将在特定内存地址处计算指针的值。如果字符等于空字符,则我们已到达字符串的末尾。
获取(字符串)
表示您正在从旧文本/讲师那里学习,因为自C11以来,gets()
已从C中删除。您应该使用fgets(),它还可以防止缓冲区溢出://我不理解这一部分:“指针
是字符串
的第一个元素的地址。由于字符串由字符组成,字符的大小为1
,字符串以\0
(空字符)结尾,因此计数器将前进,直到达到\0
并返回最后一个值。请认真对待不要使用get()
的建议。使用变量c
作为字符串的索引可能不是清晰的最佳做法,但也没有什么不寻常的地方。反向函数会更改字符串。。怎样?从2到lengh/2,在每次迭代中切换end和begin,ofc begin++&end,以避免产生无限循环
int a[3] = {1, 3, 6};
printf("%d\n", *(a + 1)); // print 3, look 4 bytes ahead
printf("%d \n", *(a + 2)); //print 6, look 8 bytes ahead
*(pointer + c) with c == 3
while( *(pointer + c) != '\0' )
c++;