C语言中的指针与数组的定义与使用
指针的特点
- 他就是内存中的一个地址
- 指针本身运算
- 指针所指向的内容是可以操作的
操作系统是如何管理内存的
栈空间
- 4M~8m的大小
- 当进入函数的时候会进行压栈数据
堆空间
- 4g的大小 1g是操作系统
- 全局变量
内存映射
- 可以对内存的内容修改修改硬盘的内容
- 一般在数据库中经常使用
内存的分配与释放
c语言分配内存的方法
// malloc(需要分配的大小); 这里的分配的大小需要对齐的2的指数
void *mem = malloc(size);
释放内存
// 一般分配的内容都是在堆空间中的
// 如果使用完不去释放会照成内存泄漏和野指针的出现
free(men);
什么是内存泄漏:
- 不断的向系统申请内存
- 申请的内存不用,也不去释放
- 绝对不允许内存泄漏
什么是野指针
- 这个指针已经被释放掉了
- 别人又创建了这个指针
- 过去的自己又用到了这个指针
函数指针
返回值类型(*指针变量名)(参数列表);
int func(int x); // 声明一个函数
int (*f)(int x); // 声明一个函数指针
f = func; // 将func函数的首地址赋值给指针f
#include <stdio.h>
int sum (int a, int b)
{
return (a+b);
}
int main(int argc, int *argv[])
{
// 定义一个函数指针
int (*f) (int, int);
// f 指向 sum函数
f = sum;
// 执行f函数,相当于执行sum函数
int f_sum = f(2,3);
printf("f_sum: %d\n", f_sum);
return 0;
}
指针就是内存地址: void*、 char*
数组就是:char c[2]、 int arr[10],指连续相同类型的空间

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
// 定义两个int类型的指针
int *a, *b;
// 通过malloc在堆里面开辟了空间
a = (int*)malloc(sizeof(int));
b = (int*)malloc(sizeof(int));
*a = 1;
*b = 2;
// 指针a的地址是&a, a是指向空间的地址,*a是指向空间的值
printf("addr of a:%p, %p, %d\n", &a, a, *a);
printf("addr of b:%p, %p, %d\n", &b, b, *b);
return 0;
}

#include<stdio.h>
#include<stdlib.h>
int main(int argc, char *argv[])
{
// 创建一个数组c里面有3个数据,int类型的数组一个数组占4个字节,地址相关的空间相差是1个字节
int c[3] = {1,2,3};
printf("c的地址:%p\t%p\tc[0]:%p\tc[1]:%p\tc[2]:%p\t\n",c, &c, &c[0], &c[1], &c[2]);
printf("%d, %d, %d\n", c[0], c[1], c[2]);
}
C语言中的指针与数组的定义与使用的更多相关文章
- 深入理解C语言中的指针与数组之指针篇
转载于http://blog.csdn.net/hinyunsin/article/details/6662851 前言 其实很早就想要写一篇关于指针和数组的文章,毕竟可以认为这是C语言的根本 ...
- 深入理解C语言中的指针与数组之指针篇(转载)
前言 其实很早就想要写一篇关于指针和数组的文章,毕竟可以认为这是C语言的根本所在.相信,任意一家公司如果想要考察一个人对C语言的理解,指针和数组绝对是必考的一部分. 但是之前一方面之前一直在忙各种事情 ...
- C语言中的指针和数组
下面的内容节选自由我所执笔的会议记录.对于本文的不足之处,各位可以提出自己的看法. Q1:指针和数组到底是怎么一回事? A:指针和数组有本质的不同.指针就是一个内存地址,在32位系统下,一个指针永远占 ...
- C语言中的指针数组
C语言中的指针数组是什么,像 char *a[]={"ddd","dsidd","lll"}; 这里讲一下注意如果我们使用了a也就是首元素的 ...
- 转: 浅谈C/C++中的指针和数组(二)
转自:http://www.cnblogs.com/dolphin0520/archive/2011/11/09/2242419.html 浅谈C/C++中的指针和数组(二) 前面已经讨论了指针和数组 ...
- C语言中的指针笔记
C语言指针 得到变量的地址 可以使用&运算符找到变量保存在内存中的位置 int x = 1; printf("x的内存地址是"%p\n",&x) %p格式 ...
- C语言中的指针加减偏移量
C语言指针偏移技巧(也是一个要注意的坑) - 陈杰柱的博客 - CSDN博客 https://blog.csdn.net/cjzjolly/article/details/82116772 C语言中 ...
- 转:浅谈C/C++中的指针和数组(一)
再次读的时候实践了一下代码,结果和原文不一致 error C2372: 'p' : redefinition; different types of indirection 不同类型的间接寻址 /// ...
- 【ZZ】C 语言中的指针和内存泄漏 & 编写高效的C程序与C代码优化
C 语言中的指针和内存泄漏 http://www.ibm.com/developerworks/cn/aix/library/au-toughgame/ 本文讨论了几种在使用动态内存分配时可以避免的陷 ...
随机推荐
- 移动端rem屏幕设置
//修改页面title var pageTitle=document.getElementsByTagName("title")[0].innerHTML; if(location ...
- Laravel Vuejs 实战:开发知乎 (2)用户登录
1.安装一个给用户提示的扩展包: 二选一: https://github.com/laracasts/flash [我选的这个]https://github.com/oanhnn/laravel-fl ...
- easyapi用法
https://www.easyapi.com/api/?documentId=1773&themeId=
- 关于C语言gets()函数
看这里就好了: 1.https://www.quora.com/Why-is-it-unsafe-using-gets-in-C-C++ 2.https://stackoverflow.com/que ...
- web前端安全性
跨站脚本攻击(XSS攻击) XSS(Cross Site Scripting),跨站脚本攻击.XSS是常见的Web攻击技术之一.所谓的跨站脚本攻击指得是:恶意攻击者往Web页面里注入恶意Script代 ...
- 转载--php 7.2 安装 mcrypt 扩展
在 php 官网下载 mcrypt 包,php 扩展官网 # wget http://pecl.php.net/get/mcrypt-1.0.1.tgz # tar xf mcrypt-1.0.1.t ...
- dwz中的(tree)树形菜单的默认收缩
做网站后台时,为了方便管理,可能会用到dwz中的树形菜单,如下: 树形菜单的收缩有默认属性值,可以对其进行一定的初始设定: DWZ的树结构是按<ul>,<li>的嵌套格式构成, ...
- Golang核心编程
源码地址: https://github.com/mikeygithub/GoCode 第1章 1Golang 的学习方向 Go 语言,我们可以简单的写成 Golang 1.2Golang 的应用领域 ...
- 搭建一个maven管理的ssm项目需要配置那些文件
链接:https://blog.csdn.net/java987654/article/details/80746866
- HYSBZ-2038小Z的袜子
作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命-- 具体来说,小Z把这N只袜子从1到N编号,然后从 ...