C指针 - 按值传递

时间:2013-11-06 17:54:22

标签: c pointers

我想知道为什么当我调用readF()并让它返回缓冲区指针并在main()中打印缓冲区时,它会打印实际数据而不是内存地址?我正在返回地址而不是实际数据正确吗?在我的主要文件中,我有一个指向返回内容的指针,这正是readF()中的缓冲区指针指向的内容。

char *readF(){

char *buffer=NULL;

//allocate memory to contain the string plus null terminator
buffer=malloc((sizeof(char)*4)+1);
//fill memory with string Hello plus terminator

return buffer;
}

int main(int argc, char **argv){
char *buffer;
buffer=readF();
printf("%s", buffer);

return 0;
}

2 个答案:

答案 0 :(得分:2)

您在缓冲区内打印实际数据,因为您使用%s语句中指定的printf格式。这告诉printf假定它接收的指针,在这种情况下,buffer是第一个说明符,是一个指向以NULL结尾的字符串的指针,因此它打印字符串。

如果要打印地址,请使用%p格式说明符

当你说readF函数返回内存地址时,你是对的。它返回缓冲区第一个字节的内存地址,即指向您分配的缓冲区的指针。

注意:在你的功能结束时你真的应该free(buffer):)

答案 1 :(得分:1)

要打印您需要%p说明符的地址 改变

printf("%s", buffer);  

printf("%p", (void *)buffer);