C++学习(十七)(C语言部分)之 指针
复习 数组
定义格式 类型 数组名[数组大小]
数组名+下标
int arr[2][3]={{1,2,3},{4,5,6}};
 int arr[][3]={1,2,3,4,5,6};//二维数组定义的时候赋值 不能省略列 但可以省略行
内存地址 内存(字节) 每个字节编号(地址)
	指针--->存放地址的类型  & 取地址   *取值(解引用)
指针定义
	类型 *指针的名字  定义指针的格式 (类型 指针保存变量类型的地址)
	(point 指针)
	指针 可以通过地址修改/访问其他变量值
	一般用在 内存申请+函数传参
	指针 一般涉及到指针变量一个指向的方向
指针的类型
	指针指向的数据的类型
	指针--->内存   一条大街  每个字节--->门牌号(地址)
	指针就是存放地址的变量
int *p
	int 表明p指向一个int类型的变量
	int* 表明指针是int*类型
使用过程中 p 表示指针变量 地址
	        *p 表示指针指向的内容 int
	地址不一样 操作不一样
	指针存的是什么东西 (地址)
	指针如何赋值 如何使用(p *p)
	p表示地址 *p是值
指针赋值 赋值变量的地址  &x 得到当前变量的地址
	(每次运行的时候 变量地址未必一致)
	NULL (特殊规定 指针没有指向任何变量 赋值)
	 指针  先复制 然后使用
	 变量没有赋值不能使用 指针没有赋值页不能使用
	 int x;
	 printf("%d",x);乱码
	 规定 如果指针没有指向内容 让指针赋值为NULL (相当于指针的默认值 需要手动赋值)
	 指针赋值后使用 *p
	 操作 *p操作指向变量的值
*解引用 只能用于指针
	 一级指针 int *p/double *p/float *p/char *p
内存的分配 一次程序运行的时候变量分配的地址是不变的
	 指针很麻烦 并且不实用
指针 1.能不能存值--->
	 int x;
	 int *p;
	 p=1;//操作是错误的 赋值时地址
	 int*p=x;//x int类型 赋值指针 错误的
	 p=&x;
指针 2.麻烦
	 指针去修改变量的值
	 变量可以通过变量名去修改
	 有一种情况 不能通过变量名去修改 必须用到指针  函数传参
指针 3.必须使用指针
	 内存四区 --->定义一个变量 (在内存中分配一块地址)
	        栈区   (定义变量 定义在栈区) 内存不需要管理 自动分配内存 自动释放 (缺点 栈溢出 大概只有4M空间 再大就管理不了) 例如arr[1000000000000];
			堆区   (手动申请 手动释放 必须用指针操作) 手动确定数组大小(动态数组) 堆区
			全局静态常量区   存放全局变量 静态变量 常量 (比栈区大)
			代码区  (存放代码二进制)
			函数里面定义的变量 在栈区
			堆区 用函数申请释放
			全局变量 放在main函数外面  在函数外部定义的变量
			静态 static 修饰的变量  
			字符串常量---->存放在常量区  常量 数据不能修改

#include<stdio.h>
#include<stdlib.h>//srand rand sysytem malloc free
int main()
{
#if 0 int x = ;//定义变量 赋值
//取到x的地址
int *p;//定义 定义变量
p= &x;//赋值 给指针赋值
printf("%p\n",p);//打印p的值(地址)
*p = ;//修改的x 操作*p和操作x 用指针去修改另外一个变量的值
if (p == NULL)
{
//说明指针没有指向任何内容 不能使用 *p
}
printf("%p\n",p);//打印p的值(地址)
printf("%p\n",&x);//打印地址 格式占位符%p
//假设需要申请一块空间 存放int malloc(sizeof(int)*1);//申请内存 返回一个地址 必须用指针保存 ()里面是申请的内存的大小 一般搭配sizeof 返回一个地址 括号里面的数字 表明大小 单位是字节
//malloc 内存申请 分配多少空间 //使用时和数组一样
int*q = (int*)malloc(sizeof(int)* );
*q=;//操作第一个int *(q+n) 操作第n+1个int *(q+0)~*(q+99)
q[] = ;//q[n]相当于 *(q+n)
for (int i = ; i < ; ++i)
{
*(q + i) = i;//通过指针 使用堆内存
//或者 q[i]=i;
printf("%d",*(q+i));
}
//q[100];//越界
//*(q+100);//越界
int*myPoint = (int*)malloc(sizeof(int)*x);//内存申请 数组在堆区 大小 是由变量来决定的 动态数组
//int arr[100];//数组大小必须是常量 静态数组 free(q);//堆区内存必须要手动释放
free(myPoint);
while ()
{
malloc(sizeof(int)*);
}
#endif #if 1
char mystr[] = "hello world";//mystr 数组 栈区
char *pstr = "hello world";//pstr定义的是指针 保存的是地址 保存的是字符串的地址
//char*pstr="hello world";//常量区 内容不能修改
//pstr = "hello world";//字符串的地址赋值给了pstr
mystr[] = '';
//pstr[0] = '1';//用指针修改了常量区的内容 所以会报错
//*(pstr+0)='1'; #endif getchar();
return ;
}
1.指针 定义格式 int*p int表示p要指向的内容(p保存的变量的地址) *表示这是指针 p表示指针的名字
      使用方式 赋值 用地址给指针赋值(需要一个额外的变量)
	          使用 *p 代表p指向的内容
2.内存四区
       栈区
	   堆区
	   全局静态常量区(全局区)
	   代码区
3.特殊指针用法
       堆区的内存申请释放  malloc free 头文件 stdlib.h
	   char*p="hello"和char arr[]="hello"的区别
注意事项 1.指针使用的时候必须向赋值然后使用
        2.指针只能赋值地址
		3.内存申请必须释放 不释放会占内存 直到重启
		4.定义指针int*p
		  p相当于地址 *p相当于指向的内容
        5.不同类型指针不能互相赋值 (类型不一样 操作也不一样)
		  //除了malloc 不考虑任何强转
2018-07-20 10:29:29
C++学习(十七)(C语言部分)之 指针的更多相关文章
- GO学习-(10) Go语言基础之指针
		Go语言基础之指针 区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,是安全指针. 要搞明白Go语言中的指针需要先知道3个概念:指针地址.指针类型和指针取值. Go语言中的指针 任何程序数 ... 
- OC学习3——C语言特性之指针
		1.指针是C语言中的一个非常重要的概念,实际上,OC系统类的变量.自定义类的变量等都是指针.定义指针变量的语法格式如下,其中*代表一个指针变量,整个语法代表定义一个指向特定类型的变量的指针变量.注意: ... 
- ndk学习之C语言基础复习----指针、函数、预处理器
		指针: 指针乃C.C++的灵魂之所在,所以有必要好好的复习复习.什么是指针?一句话来概括:“指针是一个变量,它的值是一个地址.”,其中指针变量的声明有如下三种形式: 其中第一种是被推荐的写法. 其中还 ... 
- c语言学习书籍推荐《C语言学习路线图•C语言必须知道的300个问题》下载
		下载地址:点我 <C语言学习路线图•C语言必须知道的300个问题>以基础知识为框架,介绍了c语言各部分知识所对应的常见开发疑难问题,并作了透彻地解析.<C语言学习路线图•C语言必须知 ... 
- ndk学习之C语言基础复习----虚拟内存布局与malloc申请
		在这一次中来学习一下C语言的内存布局,了解它之后就可以解释为啥在用malloc()申请的内存之后需要用memset()来对内存进行一下初始化了,首先来了解一下物理内存与虚拟内存: 物理内存:通过物理内 ... 
- C语言之漫谈指针(上)
		C语言之漫谈指针(上) 在C语言学习的途中,我们永远有一个绕不了的坑,那就是--指针. 在这篇文章中我们就谈一谈指针的一些基础知识. 纲要: 零.谈指针之前的小知识 一.指针与指针变量 二.指针变量的 ... 
- C语言之漫谈指针(下)
		C语言之漫谈指针(下) 在上节我们讲到了一些关于指针的基础知识: 详见:C语言之漫谈指针(上) 本节大纲: 零.小tips 一.字符指针 二.指针数组与数组指针 三.数组传参与指针传参 四.函数指针及 ... 
- Swift3.0语言教程使用指针创建和初始化字符串
		Swift3.0语言教程使用指针创建和初始化字符串 Swift3.0语言教程使用指针创建和初始化字符串苹果的Swift团队花了不少功夫来支持C的一些基础特性.C语言中为我们提供了指针,Swift也不例 ... 
- 值得学习的C语言开源项目
		值得学习的C语言开源项目 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工 ... 
- C语言中的指针数组
		C语言中的指针数组是什么,像 char *a[]={"ddd","dsidd","lll"}; 这里讲一下注意如果我们使用了a也就是首元素的 ... 
随机推荐
- java 实现单向链表
			package cn.com.factroy2; /** * 可以看做是操作链表的工具类,链表的核心结构就是节点的数据结构 * @author wanjn * */ public class Sing ... 
- win 10 初始环境变量
			有时用户会修改Win10系统的环境变量,改到后面原来是什么的也记不得了,想要改回去还要去别的电脑查看,这里转载下Win10 64位环境变量的默认初始值. 附:打开环境变量方法:电脑左下右键——系统—— ... 
- SimpleDateFormat的安全问题解决方法
			问题: SimpleDateFormat 是线程不安全的类,一般不要定义为static变量,如果定义为static,必须加锁,或者使用DateUtils工具类. 而且SimpleDateFormat ... 
- OpenStack之queens版本创建负载均衡器时报错问题!
			采用kolla-ansible部署完毕后,创建负载均衡器时会提示如下的报错 解决办法: 修改网络节点的neutron-lbaas-agent容器 进入lbaas容器里 [root@openstack0 ... 
- SharePoint Framework 构建你的第一个web部件(一)
			博客地址:http://blog.csdn.net/FoxDave SharePoint客户端web部件是出现在SharePoint页面的控件,但却是在浏览器本地运行的.他们是SharePoint ... 
- L313 珊瑚裸鼠灭绝
			This week the Australian government declared the extinction of a tiny rodent called Bramble Cay melo ... 
- Ubuntu配置静态IP
			1. 输入命令:sudo vi /etc/network/interfaces 编辑文件: auto lo iface lo inet loopback auto eth0 iface eth0 in ... 
- centos6.6安装hadoop-2.5.0(六、各种node功能)
			一.hadoop的YARN框架 hadoop的YARN职能就是将资源调度和任务调度分开 ResourceManager全局管理所有应用程序计算资源的分配,每一个job的ApplicationMaste ... 
- switfmailer    邮件时间错误 处理
			Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use ... 
- python 正则匹配时间格式转换方法
			import re from datetime import datetime a = '2018年8月9日 10:10' s = re.findall('\d+',a) print(s) d = ' ... 
