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正在打印该值。     

要回复问题请先登录注册