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语言-指针基础 -> 正文阅读

[C++知识库]C语言-指针基础

1、内存
断电会丢失数据,电脑里面的内存条。硬盘断电不会丢失数据。
2、指针
指针到底是什么?->内存地址
数据(变量)存储在内存里面,存储在内存那个位置?->由内存随机分配
如何获取该变量的地址?->使用取地址符号&,就可以得到该变量的地址
程序:获取变量的地址(是一个具体的值)

#include<stdio.h>
int main()
{
	int a = 1, b = 2, c = 3;
	printf("a的地址:%d,b的地址:%d,c的地址:%d",&a,&b,&c);
	//输出结果:a的地址:9435640,b的地址:9435628,c的地址:9435616
	while (1);
}

指针常量->固定的内存地址,&a=9435640、&b=9435628,&c=9435616是常量不能修改。不能随便给&a赋值。

指针变量:

#include<stdio.h>
int main()
{
	int a = 1;
	int* p;//int* 是一种新类型,定义的是地址(&a的值),
		   //类型(如:int(存的是整形)、char(存的是字符型)、short、long)
	p = &a;//把变量a的地址赋值给新类型p
	printf("a的地址为:%d\n", p);
	printf("a的地址为:%d\n", &a);//&a和p的值是相等的
	//输出的结果:a的地址为:3930648  
	//			 a的地址为:3930648
	while (1);
	return 0;
}

看完是否有点懵逼,其实刚开始我也是一样。。

int* p=&a;
int* p;p = &a;

我会不特别理解这两句的区别(是同一句话),其实你只要记住int* 是一起的,是一个新的类型,存地址的类型,那么p就是存地址的。

int* p;//我习惯于把*靠近int来理解,那么p就是一个整型指针变量
//p存的就是地址,p就可以被&a赋值

现在可以从第二句倒过来读

int* p;//定义int* (整型指针类型)p;
p = &a;//把a变量的地址给p,p存的就是地址

指针到底是什么?->内存地址
如果你还看不懂,那应该是我的问题了。(去看看视频教程吧)

3、间接访问
指针(int* p) 间接访问修改变量(int a)的值。

#include<stdio.h>
int main()
{
	int a = 1;
	int* p;//定义一个指针
	p = &a;//把变量a的地址赋值给指针p
	printf("1、a=%d\n", a);//1、a=1
	*p = 10;//修改a的值,p存的是a的地址,*指向p(内存地址)上面的值a=1;
	printf("2、a=%d\n", a);//2、a=10
	system("pause");
	return 0;
}

4、二级指针


#include <stdio.h>
//二级指针改变量的值
int main()
{
	char ch='A';
	char* pch=&ch;
	char** ppch=&pch;

	printf("%c\n",ch);

	** ppch='B';
	printf("%c\n",ch);

	return 0;
}

5、数组和指针

#include <stdio.h>
int main()
{
	char ch[10]="ASDFGHJKLP";//定义一个char型数组
	char *pch[10];//定义一个指针数组    数组指针:int (*ap)[10];
	char **ppch=pch;//一级指针的地址给二级指针
	int i;
	for(i=0;i<10;i++)
	{
		pch[i]= &ch[i];//数组的各个元素对应的地址给一级指针
	}
	for(i=0;i<10;i++)
	{
		printf("%c ",**ppch);//使用二级指针来访问数组的值
		ppch++;
	}
	printf("\n");
	return 0;
}

6、const修饰指针

#include <stdio.h>

int main()
{
	int num=1;
	const int limit=10;//只读,整数常量
	//指向常量的指针   int const *p1等价于const int *p1
	const int *p1=&limit;//地址可以变,地址指向的值不能变

	//p1=&num;//合法 地址可以变
	//*p1=10;//不合法 地址指向的值不能变

	int* p;//指向非常量的指针  地址可以改,地址指向的值也可以改
	const int* p;//指向常量的指针 地址可以改,地址指向的值不能改
	int * const p;//指向非常量的常量指针  地址可不能改,地址指向的值可以改
	const int * const p;//指向常量的常量指针  地址不能改,地址指向的值也不能改
	return 0;
}

7、函数指针

#include <stdio.h>
typedef int (*funptr)(int,int);//

//
int add(int num1,int num2)
{
	return (num1+num2);
}

int sub(int num1,int num2)
{
	return (num1-num2);
}

funptr select(char ch)
{
	switch(ch)
	{

	case '+':
		return add;
		break;
	case '-':
		return sub;
		break;
	}
}

int evaluate(char ch,int num1,int num2)
{
	funptr f=select(ch);
	return f(num1,num2);
}


int main()
{
 	printf("%d\n",evaluate('+',5,6));
	printf("%d\n",evaluate('-',5,6));
	return 0;
} 
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-26 08:41:10  更:2021-11-26 08:42:12 
 
开发: 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/24 8:45:45-

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