回忆一波字符串指针,主要是因为最近复习到了C++的内容,如果有些错的地方大家希望可以指出,我们共同进步。
1 #include <stdio.h>
2 #include<iostream>
3
4 using namespace std;
5
6 void main(){
7
8 char* p1 = "hello";
9 char* p2 = "world";
10 char* p3 = "!!";
11 //char* a[] = {p1,p2,p3};
12 char* a[] = {"hello","world","!!"};
13
14 char** p;
15 p = a;
16 p++;
17 cout << *p<<endl;
18 cout << **p<<endl;
19 }
//强行解释一波,对指针还是有点模糊,所以翻起以前的内容看看,小结一下
数组a其实就是一个字符串数组,a此时是数组名,就存储了(不能说指向了,因为数组名不是指向)hello字符串的首地址(我们常常说指针指向一块内存,
其实就是指向它的首地址,例如int i = 10; int* p =&i; p指向了i这个int变量的首地址),这里是数组名,所以就是存储可它的首地址,
a数组里面存的都是一个字符数组。每个字符数组的数组名存的都是字符串的首地址。*a 就是取a所存地址对应的值,就是 “hello”了,p指向了a ,
于是p也获取到了hello这个字符串的首地址,*p就是 “hello” 了,**p就是hello这单独一块内存的首地址了,就是h这个字符了。
对应的内存模型:
注意:------------------数组名不是指针,而是一个地址常量,可以使用指针操作地址,进而操作数组,当数组名++时,此时的数组名就类似于指针。