传递给params的连续记忆

时间:2016-02-12 09:59:18

标签: c pointers memory parameters

我正在尝试一些东西,发现这有点奇怪。使用下面的代码,它将输出“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);
  };
}

2 个答案:

答案 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"传递时,它会被存储在只读存储器中,并且会传递指向这些存储器地址的指针,不知何故,内存在您的情况下变得连续。不要指望每次都有相同的行为。这是未定义的。