我正在尝试一些东西,发现这有点奇怪。使用下面的代码,它将输出“World”(每个字符分成每行)。这是否意味着传递给函数的参数在内存中是连续的?
#include <stdio.h>
#include <string.h>
void mystrtst(char *s, char *t);
int main() {
mystrtst("Hello", "World");
}
void mystrtst(char *s, char *t) {
while(*s++);
for( ; *t ; s++, t++) {
printf("%c\n", *s);
};
}
答案 0 :(得分:0)
你有指向存储的2个字符串的指针。
您所看到的是未定义的行为。
无法保证这两个字符串始终以输出显示的方式存储。
答案 1 :(得分:0)
正如@Gopi所说,这是一种未定义的行为。 要理解它运行这段代码
#include <stdio.h>
#include <string.h>
void mystrtst(char *s, char *t);
int main() {
char s1[]="Hello";
char t1[]="World";
mystrtst(s1, t1);
}
void mystrtst(char *s, char *t) {
while(*s++);
for( ; *t ; s++, t++) {
printf("%c\n", *s);
};
}
您将获得一些随机字符,表明参数的内存不连续。实际上你只传递地址。
当您直接将参数作为"Hello", "World"
传递时,它会被存储在只读存储器中,并且会传递指向这些存储器地址的指针,不知何故,内存在您的情况下变得连续。不要指望每次都有相同的行为。这是未定义的。