如何解决c中的指针初学者
| 我刚刚开始研究C,它来自Java背景。我很难把头缠在指针上。从理论上讲,我感觉很明白,但是当我尝试使用它们或遵循使用它们的程序时,我很快就会迷路。我试图遵循字符串concat练习,但是它没有用,所以我将其简化为一些基本的指针练习。它符合strcat函数的警告冲突类型,当我运行它时,完全崩溃。 谢谢你的帮助#include <stdio.h>
#include <stdlib.h>
/* strcat: concatenate t to end of s; s must be big enough */
void strcat(char *string,char *attach);
int main(){
char one[10]=\"test\";
char two[10]=\"co\";
char *s;
char *t;
s=one;
t=two;
strcat(s,t);
}
void strcat(char *s,char *t) {
printf(\"%s\",*s);
}
解决方法
您的
printf()
应该看起来像这样:
printf(\"%s\",s);
星号是不必要的。 “ 3”格式参数表示该参数应为“ 4”,即“ 5”是什么。用*
前缀s
会导致额外的无效间接寻址。
您将收到有关类型冲突的警告,因为strchr
是标准库例程,应具有以下签名:
char * strcat ( char * destination,const char * source );
您的退货类型不同。您可能应该将您的名称重命名为mystrchr
或其他名称,以避免与标准库发生冲突(如果使用相同的名称,则可能会出现链接器错误)。
,更改
printf(\"%s\",*s);
至
printf(\"%s\",s);
原因是printf期望将%s
的替换内容作为指针。它将在内部取消引用以获取值。
因为您将s
声明为char
指针(char *s
),所以函数中s
的类型就是指向char
的指针。因此,您只需将该指针直接传递到printf
中即可。
,在C语言中,取消引用指针时,将获得该指针指向的值。在这种情况下,您将获得s指向的第一个字符。正确的用法应该是:
printf( \"%s\",s );
顺便说一句,strcat是一个标准函数,它返回一个指向字符数组的指针。为什么要自己做?
,将*s
替换为s
还不会追加字符串,这是完全有效的代码:
注意功能urstrcat
#include <stdio.h>
#include <stdlib.h>
/* urstrcat: concatenate t to end of s; s must be big enough */
void urstrcat(char *string,char *attach);
int main(){
char one[10]=\"test\";
char two[10]=\"co\";
char *s;
char *t;
s=one;
t=two;
urstrcat(s,t);
return 0;
}
void urstrcat(char *s,char *t) {
printf(\"%s%s\",s,t);
}
,指针是变量,它指向变量的地址。
#include \"stdio.h\"
void main(){
int a,*b;
a=10;
b=&a;
printf(\"%d\",b);
}
在下面的代码中,您将看到一个int \'a \'和一个指针\'b \'。
此处b被视为整数的指针,并在其前给\'\'进行声明。\'\'声明\'b \'是指针。那么您将看到\“ b =&a \”。这意味着b正在使用整数\“ a \”的地址,该地址在该特定内存中保持值10,而printf正在打印该值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。