• C 语言的指针数组,输出符号之大融合


    C 语言的指针数组,输出符号之大融合

    问题1:为什么第7段,只能写 *p

    #include <stdio.h>
    
    int main( int argc, char const *argv[])
    {
      char s[] = "hello";		// 定义了数组,指向 hello 
      char* p = &s[1];   // 定义了指针,对 hello 进行搜索 
      printf("%c
    ",*p); 
    }
    

    写成 *p 是因为上方指定了 &s[1]

    本质上我是在将值以%c的方式打印,如果写成 p 就是再将地址以%c 的方式打印。

    问题2:那么什么情况下可以改为 p

    #include <stdio.h>
    
    int main( int argc, char const *argv[])
    {
      char s[] = "hello";		// 定义了数组,指向 hello 
      char* p = &s[0];   // 定义了指针,对 hello 进行搜索 
      printf("%s
    ",p);
    }
    

    有没有发现,我把 &s[1] 改成了 &s[0] 就可以了?

    这是因为原本 &s[1] 是将地址指向了 hello, h->0, e->1中的 e ,所以打印的时候就只能将 e 打印出来了。但如果我将地址指向了 &s[0] 其实是指向了数组本身。

    这个时候,由于本身就属于数组所以用 p 就可以使用 %s 打印出来。

    注意俩个地方:

    1、&s[0]s 等价,这一点要时刻提醒自己。

    2、不能将 &s[0] 写成 &s。这是因为上述 char s[] = "hello";s[] 就等于 s[6],而如果你直接写成 &s 实际就等于 s[6]。当然,你可以改成 问题1 的方式来进行访问,但要注意 s[6] 要改为 s[5]。至于为啥是 6 而不是最大的 5,暂时没有答案。

    问题3:这一段代码有什么问题?

    #include <stdio.h>
    
    int main( int argc, char const *argv[])
    {
      char s[] = "hello";		// 定义了数组,指向 hello 
      char* p = &s[1];   // 定义了指针,对 hello 进行搜索 
      printf("%c
    ",p);	
      
    }
    

    这一段的问题就是 问题1 的问题,不能将 p 也就是地址,打印为字符也就是 %c

    如果没有搞懂的话,再回头看 问题1 加粗的那部分。

    这段有俩种改正方式:

    1、 将 %c 改为 %p 进行地址的打印

    #include <stdio.h>
    
    int main( int argc, char const *argv[])
    {
      char s[] = "hello";		// 定义了数组,指向 hello 
      char* p = &s[1];   // 定义了指针,对 hello 进行搜索 
      printf("%p
    ",p);	
      
    }
    

    2、将 p 改为 *p 打印出字符信息

    #include <stdio.h>
    
    int main( int argc, char const *argv[])
    {
      char s[] = "hello";		// 定义了数组,指向 hello 
      char* p = &s[1];   // 定义了指针,对 hello 进行搜索 
      printf("%c
    ",*p);	
      
    }
    
    (完)
  • 相关阅读:
    Django(28)Django模板介绍
    Django(27)Django类视图添加装饰器
    HTTP协议-返回结果的HTTP状态
    HTTP协议二
    HTTP协议 一
    HTTP 协议用于客户端和服务器端之间 的通信
    Net分布式系统之一:系统整体框架介绍
    数据结构-实现正负数重新排序
    数据结构-合并两个已经排序的数组
    数据结构-查找第一个没有重复的数组元素
  • 原文地址:https://www.cnblogs.com/itxdm/p/c_pointer_bigfamily.html
Copyright © 2020-2023  润新知