【C生万物】 指针篇 (进级) 00(一)

简介: 【C生万物】 指针篇 (进级) 00

前言


370e28d82132798f78a90e533d2c4256_e6510fde102248338c249440750db93e.png


前面已经带大家学习了初级的指针,先回顾一下重点:指针是用来存放地址的变量;指针的大小是4/8字节;指针类型决定了指针+-整数的步长和指针解引用的权限。这期继续探讨指针,相信你会有更加深入的理解。


目录


Part1:字符指针

Part2:指针数组

Part3:数组指针

1.定义

2.&数组名与数组名

3.使用


正文


Part1:字符指针


我们知道指针是有类型的,其中一种是字符指针类型 char*


❓那么字符指针是如何指向字符的呢?接下来带大家探讨:


一般的使用:

int main()
{
  char ch = 'e';
  char* pc = &ch;
  *pc = 'e';
  return 0;
}


这种就是指针 pc 指向 字符 e


还有一种使用方法:


int main()
{
  const char* pstr = "Hello world";
  printf("%s\n", pstr);
  return 0;
}


👁️‍🗨️运行结果:


e860cd1e0fcac01500bd1982d107c077_2174dbc85de047d09ceeaa55fa80ccf3.png


❓提问:pstr 是指向 Hello world 整体吗?


实际上并不是的


而是把字符串  Hello world 的首字母 H 的地址存放到 pstr 中了:


fbf1c5c7f40552f057eff335a47e7732_69506a11dd354c0aa2c74cb724a3936c.png


下面有一道题,以加深理解:


int main()
{
  char str1[] = "Hello world";
  char str2[] = "Hello world";
  const char* str3 = "Hello world";
  const char* str4 = "Hello world";
  if (str1 == str2)
    printf("str1 and str2 are same\n");
  else
    printf("str1 and str2 are not same\n");
  if (str3 == str4)
    printf("str3 and str4 are same\n");
  else
    printf("str3 and str4 are not same\n");
  return 0;
}


👁️‍🗨️输出结果:


257d998becf508d96f51d9e8df85f215_c2431d5a0d534df09d34f89e372c9e36.png


解释:


str1 和 str2 是分别开辟的两个数组,用相同的常量字符串去初始化两个数组,也是会开辟出不同的内存块。所以 str1 与 str2 不同。


C/C++会把常量字符串存储到单独的一个内存区域,str3 和 str4 指向的就是同一个常量字符串,所以 str3 和 str4 相同。


Part2:指针数组


这一部分在指针初级提到了,这里回顾一下:


指针数组本质是什么?


答:数组。


以下的指针数组是什么意思?


1. int* arr1[3]; 
2. char* arr2[2]; 
3. char** arr3[1];


答:


int* arr1[3];      --- 存放一级整型指针的数组


char* arr2[2];   --- 存放一级字符指针的数组


char** arr3[1];  --- 存放二级字符指针的数组

目录
相关文章
C生万物 | 从浅入深理解指针【最后部分】(二)
C生万物 | 从浅入深理解指针【最后部分】(二)
|
6月前
|
存储 C++
C生万物 | 从浅入深理解指针【第三部分】(转移表的实现)
C生万物 | 从浅入深理解指针【第三部分】(转移表的实现)
C生万物 | 从浅入深理解指针【第二部分】(二)
C生万物 | 从浅入深理解指针【第二部分】(二)
|
6月前
|
编译器
C生万物 | 从浅入深理解指针【第二部分】(一)
C生万物 | 从浅入深理解指针【第二部分】 前言: 如果没有看过第一部分的话,推荐先看第一部分,然后再来看第二部分~~
|
6月前
|
存储 C语言 C++
C生万物 | 从浅入深理解指针【第一部分】(一)
C生万物 | 从浅入深理解指针【第一部分】
|
6月前
|
机器学习/深度学习 安全 程序员
C生万物 | 从浅入深理解指针【第一部分】(二)
C生万物 | 从浅入深理解指针【第一部分】(二)
|
6月前
|
C语言 C++
C生万物 | 从浅入深理解指针【最后部分】(一)
C生万物 | 从浅入深理解指针【最后部分】(一)
C生万物 | 从浅入深理解指针【第四部分】(qsort的使用和模拟实现)
C生万物 | 从浅入深理解指针【第四部分】(qsort的使用和模拟实现)
|
11月前
|
存储 编译器 C语言
C生万物 | 指针进阶 · 炼狱篇-3
C生万物 | 指针进阶 · 炼狱篇
69 0
|
11月前
C生万物 | 指针进阶 · 炼狱篇-2
C生万物 | 指针进阶 · 炼狱篇
51 0