c中的指针(初学者)

时间:2011-04-15 18:01:38

标签: c arrays pointers

我刚开始看一下来自java背景的C语言。我很困难地把头包裹在指针周围。从理论上讲,我觉得我得到它但是一旦我尝试使用它们或者按照使用它们的程序,我很快就会迷失方向。我试图遵循字符串连续练习,但它没有工作,所以我把它剥离到一些基本的指针练习。它符合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);




}

4 个答案:

答案 0 :(得分:5)

您的printf()应如下所示:

printf("%s",s);

星号是不必要的。 %s格式参数意味着参数应该是char*,这是s。使用s*进行前缀会导致额外的无效间接。

您收到有关冲突类型的警告,因为strchr是标准库例程,应具有此签名:

char * strcat ( char * destination, const char * source );

你的回复类型不同。您可能应该将您的名称重命名为mystrchr或其他内容,以避免与标准库发生冲突(如果使用相同的名称,可能会出现链接器错误)。

答案 1 :(得分:0)

更改

printf("%s",*s);

printf("%s",s);

原因是printf希望替换%s为指针。它将在内部取消引用它以获得值。

由于您将s声明为char指针(char *s),因此函数中s的类型就是那个,指向{{1}的指针}}。所以你可以直接将指针传递给char

答案 2 :(得分:0)

在C中,当您取消引用指针时,您将获得指针指向的值。在这种情况下,您将获得s指向的第一个字符。正确的用法应该是:

printf( "%s", s );

BTW,strcat是一个返回指向字符数组的指针的标准函数。为什么要自己制作?

答案 3 :(得分:0)

指针是变量,指向变量的地址。

#include "stdio.h"
void main(){
  int a,*b;
  a=10;
  b=&a;
  printf("%d",b);
}

在下面的代码中,您将看到一个&#39; a&#39;和一个指针&#39; 这里b被视为整数的指针,并通过给出&#39; &#39;在它之前。&#39; &#39;宣布&#39; b&#39;是一个指针。然后你会看到&#34; b =&amp; a&#34;。这意味着b正在取整数的地址&#34; a&#34;这是在特定的内存中保持值10,printf正在打印该值。