我是C编程的新手,并且在以下代码中遇到了一些指针问题。我使用的是C89标准。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char * b(char *p) {
char *z;
z = p;
printf("b(): %s\n", z);
return z;
}
void a(char *p, char *q) {
q = b(p);
printf("a(): %s\n", q);
}
void main(void) {
char *p = (char *) malloc(15);
char *q;
strcpy(p, "This is a test");
a(p,q);
printf("main(): %s\n", q);
free(p);
}
出于某种原因,我的printf
函数在main()
函数中没有打印任何内容。 printf
和a()
函数中的b()
次调用正在运行。我不知道为什么我的指针“q”在主函数中丢失了。我甚至尝试在main()函数中将动态内存分配给“q”,但仍然没有结果。
答案 0 :(得分:4)
.contact
中的 .third .message_wrapper {
position: relative;
}
.third .message_wrapper .contact {
position: absolute; bottom: 0;
}
.third .message_wrapper.sender .contact {
right: 0;
}
.third .message_wrapper.sender .content_wrapper {
margin-right: 12%;
}
.third .message_wrapper.receiver .contact {
left: 0;
}
.third .message_wrapper.receiver .content_wrapper {
margin-left: 12%;
}
未初始化。您可能认为在q
之后main()
已更改,但由于该指针按值传递(作为C中的所有内容),从q
返回后,对{{1}进行了任何更改被丢弃(它们是a(p,q)
)
要解决这个问题,在保留大部分功能签名的同时,你必须添加另一个指针级别
在以下代码中,a
中的q
和a
是p
的本地代码,但您并未直接更改其中的任何内容,但是,您正在修改价值,由q
指出(该值的类型为a
,因此另一个很容易丢失)
a
或者只是返回该指针,然后分配到q
中的*char
(正如您在void a(char *p, char **q) {
*q = b(p);
printf("a(): %s\n", q);
}
void main(void) {
...
a(p,&q);
printf("main(): %s\n", *q);
....
}
中所做的那样)
为了更好地理解为什么会这样,请考虑这个更简单的例子:
q