字符串指针的理解

回忆一波字符串指针,主要是因为最近复习到了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这个字符了。
对应的内存模型:

注意:------------------数组名不是指针,而是一个地址常量,可以使用指针操作地址,进而操作数组,当数组名++时,此时的数组名就类似于指针。
posted @ 2019-03-11 19:26  四季列车  阅读(1445)  评论(0编辑  收藏  举报