IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 指针的进阶 -> 正文阅读

[C++知识库]指针的进阶

指针进阶

我们在初阶时就已经接触过指针,了解了指针的相关内容,有:

  • 指针定义:指针变量,用于存放地址。地址唯一对应一块内存空间。
  • 指针大小:固定32位平台下占4个字节,64位8个字节。
  • 指针类型:类型决定指针±整数的步长及指针解引用时访问的大小。
  • 指针运算:指针解引用,指针±整数,指针-指针,指针关系运算。

本章节在此基础上,对C语言阶段指针进行更深层次的研究。

字符指针

字符指针,存入字符的地址,类型为char*

字符指针的作用

  • 指向单个字符
char ch = 'w';
char* pc = &ch;
*pc = 'a';

这里指针pc就是ch的地址,指向字符ch。
字符地址的类型是字符指针类型(char*)。

  • 指向字符串首字符
char* pstr = "hello world";
printf("%s\n", pstr);//hello world
printf("%s\n", pstr+1);// ello world
printf("%c\n", *(pstr+1));//e

pstr就是字符串首字符的地址,指向字符’h’。
pstr+1指向第二个字符’e’,以此类推。
打印字符串,遇到’\0’停止打印。
"hello world"是常量字符串,无法修改,其实应该加const,但是舍弃const这个字符串还是不可以修改。

有如下例题

#include <stdio.h>
int main()
{
	char str1[] = "hello bit.";
	char str2[] = "hello bit.";
	const char *str3 = "hello bit.";
	const char *str4 = "hello bit.";
	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;
}

str1与str2多是字符串首字符地址,str3与str4也是字符串首字符的地址。
str1 == str2实际上是地址的比较
str1和str2是普通的数组,是在内存上开辟了两块空间不过存放了一样的数据。
str3和str4指向常量字符串,存放在内存的常量区,是不可被修改且具有唯一性即常量区只存放一个。所以str3和str4指向的都是同一个字符串。
所以str1 != str2,str3 == str4。

总结

  • 常量字符串不可被修改,存放在内存的常量区。
  • 具有唯一性即常量区只存放一个。

指针数组

指针数组的定义

指针数组是一个存放指针的数组

int* arr1[10];整型指针数组
char* arr2[4];字符指针数组
char** arr3[5];二级字符指针数组

指针数组的使用

#include <stdio.h>
int main()
{
	int a = 10;
	int b = 20;
	int c =30;
	int d = 40;
	int* arr[4] = {&a, &b, &c, &d};
	//arr是数组,有四个元素,每个元素多是int*
	for (int i=0; i<4; i++)
	{
		printf("%d ", *arr[i]);
	}
	return 0;
}

int main()
{
	int arr1[] = {1, 2, 3, 4, 5};
	int arr2[] = {2, 3, 4, 5, 6};
	int arr3[] = {3, 4, 5, 6, 7};
	int* p[] = {arr1, arr2, arr3};
	int i = 0;
	for (i=0; i<3; i++)
	{
		int j = 0;
		for (j=0; j<5; j++)
		{
			//printf("%d ", *(*(p+i)+j));
			printf("%d ", p[i][j]);
		}
		printf("\n");
	}
	return 0;
}

int main()
{
	const char* p[] = {"abcd", "bcde", "cdef", "defg"};
	int i = 0;
	for (i=0; i<4; i++)
	{
		//printf("%s\n", p[i]);
		//printf("%s\n", *(p+i));
		int j = 0;
		for (j=0; j<4; j++)
		{
			//printf("%c ", p[i][j]);
			printf("%c", *(*(p+i)+j));
		}
		printf("\n");
	}
	return 0;
}

总结 - 很重要

p[i] == *(p+i)
p[i][j] == *(*(p+i)+j) == *(p+i)[j] == *(p[i]+j)
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-27 13:54:18  更:2021-09-27 13:55:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 21:48:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码