c++ 区分字符串指针和数组指针
时间:2020-09-19 09:27:07
收藏:0
阅读:45
#include <iostream> int main() { //创建指向字符串的指针 using namespace std; char str[999]; cin >> str; char *pn = str; //字符串名被解释为其第一个元素的地址(cout对象认为char的地址是字符串的地址) cout << pn << endl; //向cout传递一个字符串的第一个元素的地址,依次打印字符串元素直至空字符为止 //不需要cout<<*pn;这样只会打印第一个元素 char(*pn_all)[999] = &str; //注意这里要将(*pn)括起来否则[999]先与pn结合形成指针数组 cout << *pn_all<<endl; //这里输出一整个字符串,因为pn_all是指向整个字符串数组的指针 cout << (int*)str << endl; //显示字符串地址,必须将字符串指针强制转换为另一种指针类型 cout << (double*)pn << endl; //字符串指针同理 //数组的地址含义理解 int test[10] = { 0,1,2,3,4 }; cout << test << endl; //数组名也被解释为其第一个元素的地址,但和字符串区分,cout不会打印数组,而是打印&test[0] (04FF718) cout << &test << endl; //对数组名应用地址运算符时,得到整个数组的地址,从数字上来说和前者相同 (004FF718) //但从概念上来讲&test[0]是一个4字节内存块的地址,&test则是一个40字节内存块的地址 //因此,test+1,将地址值加4,而&test+1将地址值加40 cout << test + 1 << endl; //Output:004FF71C cout << &test + 1 << endl; //Output:004FF740 //理解&test的含义 int(*pas)[10] = &test; //如果省略括号,优先级规则将使pas先与[20]结合,导致pas是一个包含20个元素指针数组 cout << pas << endl; //Output:004FF718 int *pt; //显示指针地址,即数组第一个元素的地址 pt = test; //Output:004FF718 cout << pt << endl; }
原文:https://www.cnblogs.com/mazesbegin/p/13694122.html
评论(0)