小编Me_*_*_me的帖子

将指针传递给函数时为什么会出现2个星

花了很长时间才使这个代码工作,有人可以向我解释为什么我需要2个星,当我将指针传递给字符串作为函数的参数时?根据定义,指针将地址保存到将放置特定变量的存储器中.所以它是一个变量,它有自己的地址,在这个地址下是另一个变量的地址.好的.因此,如果我将指针传递给函数,我会使用&符号,因为我必须将指针地址传递给函数.精细.但接下来会发生什么.该函数接收存储器中该指针所在的信息.好的.这就是我的理解.我不明白为什么在定义函数及其参数时我需要两颗星.我传递一个指向char变量的指针.为什么不使wpisuj(char*w)无效.为什么wpisuj(char**w).内存分配对我来说是不可接受的 - 我使用malloc保留内存,malloc返回此内存的地址,因此我将此地址作为变量w的值.然后再一些我不明白的东西,如果*w是指针并将新创建的地址保存在内存中,为什么我使用*w来放置一个字符串.它应该不是*(*w)吗?由于*w是保留存储器的地址,因此*(*w)是该存储器的内容.

加起来.我不明白的是:1)为什么wpisuj(char**w)而不是wpisuj(char*w)2)为什么strcpy(w,bufor)而不是strcpy((*w),bufor)

#include<stdlib.h>
#include<stdio.h>
#include<string.h>
# define SIZE 256

void wpisuj(char** pw){
  char bufor[256];
  scanf("%s", bufor);
  int l;
  l=strlen(bufor)+1;
  *pw=(char*)malloc(l*sizeof(char));
  strcpy(*pw, bufor);
}


int main(){
  char* w;
  wpisuj(&w);
  printf("%s", w);  

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我也可以询问有关释放内存的问题.我是否认为这是明星的核心数量(如下面的代码所示):

void free_memory(char **w){
   free(*w);
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我在main()中释放内存,我会:

int main(){
  w=malloc(sizeof(buffer)+sizeof(char));
/* some code before */
  free(w);
}
Run Code Online (Sandbox Code Playgroud)

c memory pointers

3
推荐指数
1
解决办法
2496
查看次数

标签 统计

c ×1

memory ×1

pointers ×1