《C游记》 第柒章 - 指针进阶内功锻 功成行满见真如(壹)

简介: 《C游记》 第柒章 - 指针进阶内功锻 功成行满见真如(壹)

100.gif

目录

(壹) 字符指针

🌈  1.1 基础知识

🌈  1.2 面试题

(贰) 数组指针

🌈  2.1 数组指针的定义

🌈  2.2 &数组名 VS 数组名

🌈  2.3  数组指针的使用


✅《C游记》 专栏 ✅  《小玄的C游之旅》


(壹) 字符指针

🌈  1.1 基础知识

在指针的类型中我们知道有一种指针类型为字符指针char*;

一般使用:

1.png


还有一种使用方式如下:2.png


代码char* pstr = "hello bit.";

特别容易让同学以为是 把字符串hello bit 放到字符指针pstr里了

但是 本质是把字符串hello bit.首字符的地址放到了pstr中3.png上面代码的意思是把一个  常量字符串  的首字符h的地址存放到指针变量pstr中


🌈  1.2 面试题4.png

这里最终输出的是:

5.png

这里  str3    str4  指向的是一个同一个常量字符串。

C/C++会把常量字符串存储到单独的一个内存区域

当几个指针,指向同一个字符串的时候,他们实际会指向同一块内存

但是用相同的常量字符串去初始化不同的数组的时候就会开辟出不同的内存块。

所以str1和str2不同,str3和str4不同。


(贰) 数组指针

🌈  2.1 数组指针的定义

数组指针是指针?还是数组?

答案是:指针。

我们已经熟悉:

整形指针:int * pint -- 能够指向整形数据的指针。

浮点型指针:float * pf -- 能够指向浮点型数据的指针。

那数组指针应该是:能够指向数组的指针。

下面代码哪个是数组指针?


6.png

解释:7.png


🌈  2.2 &数组名 VS 数组名

对于下面的数组:

8.png

arr    &arr  分别是啥?

我们知道arr是数组名,数组名表示数组首元素的地址。

那&arr数组名到底是啥?


我们来看一段代码:

9.png

运行结果如下:10.png


可见数组名和&数组名打印的地址是一样的。

难道两个是一样的吗?

我们再看一段代码:11.png


12.png根据上面的代码我们发现,其实&arr和arr,虽然值是一样的,但是意义应该不一样的

实际上:&arr表示的是数组的地址,而不是数组首元素的地址。

(细细体会一下)

数组的地址+1,跳过整个数组的大小,所以&arr+1相对于&arr的差值是40.


🌈  2.3  数组指针的使用

那数组指针是怎么使用的呢?

既然数组指针指向的是数组,那数组指针中存放的应该是数组的地址。

看代码:21.png


一个数组指针的使用:22.png


23.png


24.png


🌈  2.4  小结

学了指针数组和数组指针我们来一起回顾并看看下面代码的意思:25.png


26.png


105.gif106.gif

目录
相关文章
|
1月前
|
C语言
【C语言】指针进阶之sizeof和strlen函数的对比
【C语言】指针进阶之sizeof和strlen函数的对比
|
1月前
|
C语言
C语言---指针进阶
C语言---指针进阶
19 0
|
1月前
|
存储 C语言 C++
C语言指针进阶-1
C语言指针进阶-1
24 1
|
1月前
|
存储 C语言 C++
【指针的进阶】C语言
【指针的进阶】C语言
|
1月前
|
C语言
【C语言进阶】 指针进阶(二)
【C语言进阶】 指针进阶(二)
|
1月前
|
C语言 C++
【C语言进阶】 指针进阶(一)
【C语言进阶】 指针进阶(一)
|
1月前
|
C语言
【C语言】指针进阶之传值调用与传址调用
【C语言】指针进阶之传值调用与传址调用
|
1月前
|
安全 程序员 编译器
[C语言]指针进阶之野指针与assert断言
[C语言]指针进阶之野指针与assert断言
|
1月前
|
存储 C语言
C语言指针进阶-2
C语言指针进阶-2
21 2
|
1月前
|
编译器 C语言
C语言-------指针进阶(2)
C语言-------指针进阶(2)
20 1