2016-02-12 60 views
-1

我正在尝试一些东西,发现这个小奇怪。使用下面的一段代码,它将输出“世界”(每个字符分解成每行)。这是否意味着传递给函数的参数在内存中是连续的?连续内存传递参数

#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

也许这篇文章可以帮助你[参数变量存储在内存?](http://stackoverflow.com/questions/16304705/where-are-parameter-variables-stored-in-memory)。 – Frodo

+0

在字符串文字中,字符是连续存储的。 –

+0

字符串不传递给函数,它们的地址是。由于它们是字符串文字,它们可能驻留在内存中的只读部分。在该部分中它们是否连续不是由c-标准规定的,即你正在调用未定义的行为。 – EOF

回答

0

你有指向2个字符串存储的是内存的一部分。

你看到的是未定义的行为。

这并不能保证这2个字符串总是以您输出显示的方式进行存储。

0

正如@戈皮所说,这是一个未定义的行为。 要理解它运行这段代码

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