字符类型的指针

例子

#include <stdio.h>

int test_char(){
  char name[] = "Tom";
  printf("%s\n",name);
  printf("%s\n",*name);
}

int test_char_pointer(){
  char *name = "Tom";
  printf("%d",name);
  printf("%d",*name);
  printf("%d",&name);
  printf("%s",name);
  printf("%d",*name);
}

void split_line(){
  int count = 20;
  for(int i = 0;i < count;i++){
    printf("%c",'-');
  }
  printf("\n");
}

int main(){
  test_char();
  split_line();
  test_char_pointer();  
}

在预测结果前,先弄清几个概念

  • 什么是指针
    指针是计算器在内存中开辟的一段内存空间,空间存放的是它所指向的变量的地址,所以当然指针也是有它自己的地址的:
    比如char *name = "Jack"这个代码片段,字符串"Jack"在内存中的地址是11399,指针变量name存放的就是11399这个地址,当打印name的地址(注意是地址),却是20118
  • 如何声明指针变量
    与生命其他变量类似,但需要在变量前加上*号:
    type *variable;
char *name = "Jack";//name指向字符串Jack的第一个字符地址
char *name;//定义一个字符类型的指针
char other_name[20] = {'J','a','c','k'};
name = &other_name;//name指针指向变量other_name的地址
  • 如何取一个变量的地址
    使用&符号获取一个变量的地址,这个变量可以是一般类型的变量,也可以是指针类型的变量:
char *p;
char name[] = "Jack";
p = &name;
  • 如何取指针指向变量的值
char *p = "Jack";
char p_value = *p;

运行结果

如果理解以上的概念,不难计算出以下答案:

#include <stdio.h>

int test_char(){
  char name[] = "Tom";
  printf("%s\n",name);//Tom
  printf("%s\n",*name);//出错 name不是一个指针 不能使用取值符号*
}

int test_char_pointer(){
  char *name = "Tom";
  printf("%d",name);//12233
  printf("%d",*name);//84
  printf("%d",&name);//238677
  printf("%s",name);//Tom
  printf("%d",*name);//出错
}

void split_line(){
  int count = 20;
  for(int i = 0;i < count;i++){
    printf("%c",'-');
  }
  printf("\n");
}

int main(){
  test_char();
  split_line();
  test_char_pointer();  
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容