【C和指针】笔记1】的更多相关文章

什么是指针: 指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址.通过指针我们可以直接对内存进行操作. 什么是地址: 比如你要给你朋友寄快递,在寄东西的时候是不是要填写地址,通过地址你的东西才能送到朋友手里.同理,比如你定义一个变量为i. 而这个变量i是存在计算机内存中的,也就是i在这个内存中的编号,即地址. 举例: #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { in…
指针的学习 两个数比较大小,通过传递内容进行比较 #include <stdio.h> void swap(int *p1, int *p2){ int temp; //注意指变量*的两个地方 定义用* 获取指针所指向的内容用* 指针变量自己的内容不带* temp = *p1; *p1 = *p2; *p2 = temp; } void main(){ int a, b; int *pointer_1, *pointer_2; scanf_s("%d,%d",&a,…
返回指针值的函数 一般带回指针值的函数,定义形式为: int *a (int x, int y); 看这个经典案例: #include <stdio.h> int main(int argc, char const *argv[]) { ] = {{60.0, 70.0, 80.5, 20.1}, {60.0, 70.0, 80.5, 21.1}, {60.0, 70.0, 80.5, 22.1}}; ], int n); double *p; ; p = search(score, m);…
一.int a[20]1. 数组名代表数组首元素的地址,不代表数组的地址2. 对数组名取地址代表整个数组的地址.a和&a代表的数据类型不一样 a代表数组首元素的地址 &a数组类型 int[20]类型 数组的类型由元素的类型和数组大小共同决定 如:int array[5] 的类型为int[5] 数组类型:typedef int(MYINT5)[5]; MYINT5为长度为5的数组类型typedef float[MYFLOAT10][10] MYFLOAT10 为长度为10的浮点数组类型 数组…
C语言指针 得到变量的地址 可以使用&运算符找到变量保存在内存中的位置 int x = 1; printf("x的内存地址是"%p\n",&x) %p格式符将地址以16进制格式输出. &x将找到变量x的地址.一般我们会使用一个指针变量保存这个地址. 指针变量是一个用来保存存储器地址的变量,当声明指针变量时,需要说明指针所指向的地址中保存的数据的类型: int *addr_x = &x; 声明一个int类型的指针变量addr_x,&x或者…
int num = 90; 定义一个整型变量num int* ptr = &num; 定义一个整型指针变量ptr,指针变量ptr的类型取决于他所需要指向的变量,如这里,ptr要指向int类型变量num,所以定义为int*变量,如果是 float类型变量num,则指针需要被定义为float * ptr *prt = num; 此处说明*ptr的值等于num的值,即num = *ptr = 90 输出方面: 输出地址格式需要用%p printf("%p,%p,%d", &p…
当用于不同的上下文环境时,static关键字具有不同的意思. 当它用于函数定义时,或用于代码块之外的变量声明时,static关键字用于修改标识符的链接属性,从external改为internal,但标识符的存储类型和作用域不受影响.用这种方式声明的函数或变量只能在声明它们的源文件中访问. 当它用于代码块内部的变量声明时,static关键字用于修改变量的存储类型,从自动变量修改为静态变量,但变量的链接属性和作用域不受影响.用这种方式声明的变量在程序执行之前创建,并在程序的整个执行期间一起存在,而不…
变量的破碎类型是指存储变量值的内存类型.变量的存储类型决定变量何时创建.何时销毁以及它的值将保持多久. 有三个地方可以用于存在变量:普通内存.运行时堆栈.硬件寄存器. 变量的缺省存储类型取决于它的声明位置.凡是在任何代码块之外声明的变量问题存储于静态内存中,也就是不属于堆栈的内存,这类变量称为静态变量.对于这类变量,你无法为它们指定其他存储类型.静态变量在程序运行之前创建,在程序的整个执行期间始终存在.它始终保持原先的值,除非给它赋一个不同的值或者程序结束. 在代码块内部声明的变量的缺省存储类型…
链接属性决定如何处理在不同文件中出现的标识符.标识符的作用域也它的链接属性有关,但这两个属性并不相同. 没有链接属性的标识符(none)总是被当作单独的个体,也就是说该标识符的多个声明被当作独立不同的实体. internal链接属性的标识符在同一个源文件内的所有声明中都指同一个实体,但位于不同源文件的多个声明则分属不同的实体.最后,属于external链接属性的标识符不管声明多少次.位于几个源文件都表示同一个实体. 图3.2的程序骨架通过展示名字声明的所有不同方式,描述了链接属性.在缺省情况下,…
c语言学习 初识c语言 c语言数据类型.运算符和表达式(整数浮点数) 字符型数据/字符串 算术运算符和算术表达式(优先级,结合性等) 顺序程序设计(运算符之类内容,字符输入输出等) C/C++ 查看数组类型长短 , python的len的封装原理 if 结构和三目运算和switch语句 c的循环语句 c数组 c算法 c递归程序 + 斐波那契 c 变量的存储类型auto等(基础知识)和c函数变量 C 指针 c 动态内存分配以及二维数组动态分配和释放 c指针 --笔记2返回指针值的函数 c 预处理的…
智能指针笔记 GCC的原子操作函数 将流水线引入cpu,可以提高cpu的效率.更简单的说,让cpu可以预先取出下一条指令,可以提供cpu的效率.如下图所示: 取指令 执行指令 输出结果 取指令 执行 可见,cpu流水钱可以减少cpu等待取指令的耗时,从而提高cpu的效率.如果存在跳转指令,那么预先取出的指令就无用了.cpu在执行当前指令时,从内存中取出了当前指令的下一条指令.执行完当前指令后,cpu发现不是要执行下一条指令,而是执行offset偏移处的指令.cpu只能重新从内存中取出offset…
C语言编程主要操作的对象就是指针. 指针从哪里来 指针就是表示内存存储区域的一组数值,使用%p格式化字符串. Linux系统会为程序维护两个临时变量存储位置:栈.堆.栈的空间少,栈通常在用户更高的地址空间处分配,通常有数M字节的大小,堆一般比栈要更大一点,一般会达到几十甚至是数百M字节. 栈 对于较小的变量,使用int.char.double等定义符号,可以直接在栈中建立空间. #include <stdio.h> int main(){ int a = -1; int b[4] = {0,…
成员数组和指针是我们c语言中一个非常重要的知识点,记得以前在大学时老师一直要我们做这类的练习了,但是最的还是忘记了,今天来恶补一下.     单看这文章的标题,你可能会觉得好像没什么意思.你先别下这个结论,相信这篇文章会对你理解C语言有帮助.这篇文章产生的背景是在微博上,看到@Laruence同学出了一个关于C语言的题,微博链接.微博截图如下.我觉得好多人对这段代码的理解还不够深入,所以写下了这篇文章. 为了方便你把代码copy过去编译和调试,我把代码列在下面:  代码如下 复制代码 #incl…
Essential C++ 1.5-1.6节,3.1节笔记 Array/Vector/指针,难度偏大, 但若学习初期不熟悉基本用法,则难以写出有效代码. 1. 基本概念 Array 是一段连续内存,数组名就是指向首地址的指针.是内建数据结构,兼容 C. Vector 可以理解为大小可变的数组,是一个类 class. 2. 指针的算术运算 指针可以进行自增(++), 自减(--), 加上一个整数(+, +=), 减去一个整数(-, -=)等算术运算. 在数组中使用频繁. 指针存的是内存地址,+/-…
一.关于二维数组和二维数组区别 (1)一维数组在内存中是连续分布存储的,同样,二维数组也是在内存连续存储的.所以从内存的角度来分析,一维数组和二维数组其实没有本质区别. (2) 二维数组可以使用一维数组来代替.但是在实际的应用中,有时候使用二维数组会更加直观,方便程序的编程. (3)两者在内存使用效率上是一模一样的. 二.二维数组的第一维和第二维概念 (1)例如 int a[2][5]中,前面的2表示第一维:后面的5表示第二维 (2) 二维数组的第一维表示最外部的那一层,第一维本身也是一个数组,…
C和指针---读书笔记.1,unsigned int  声明无符号int类型 默认是 singned,即此整数类型包括正负数.也可用于long上.说明符有 unsigned signed short long2,枚举 enum jump{cpu = 100, a = 2};3,for 循环的执行顺序,,for( expression1; expression2, expression3){statement;}expression1->expression2->statement->ex…
小猪猪C++笔记基础篇(六) ————参数传递.函数重载.函数指针.调试帮助 关键词:参数传递.函数重载.函数指针.调试帮助 因为一些事情以及自己的懒惰,大概有一个星期没有继续读书了,已经不行了,赶紧写一篇压压惊.把我文章抱走的同学留个言嘛. 函数在变成里面是一个非常重要的组成部分,那么这一部分我们先简单的介绍一下参数是如何传递进入函数,函数如何返回结果的.然后我们再来看看函数重载是个什么样的机制,最后在介绍一下所谓的函数指针到底是个什么东西.那么直接开始正题吧: 一.函数的参数传递 我们知道函…
小猪猪C++笔记基础篇(四) 关键词:数组,Vector. 一.数组与指针 数组相信大家学过C语言或者其他的语言都不陌生,简单的就是同一个变量类型的一组数据.例如:int a[10],意思就是从a开始有10个连续的int大小的空间.我们还是从初始化说起. 我们以数据类型int为例,当然也可由有很多的数据类型,可以是像int,double这种,也可以是自定义的类,一般的初始化方法有: int a[10]; int a[10]={0}; int a[3]={0,1,2}; 在前面的文章中,有的朋友提…
原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 本文由 arthinking 发表于315 天前 ⁄ itzhai.com原创文章 ⁄ C语言 ⁄ 评论数 3 ⁄ 被围观 1,775 views+   指针数组: 在一个数组中,如果它的元素全部都是指…
一.智能指针学习总结 1.一个非const引用无法指向一个临时变量,但是const引用是可以的! 2.C++中的delete和C中的free()类似,delete NULL不会报"double free"的oops. int main(int argc, char **argv) { int i; int *p = new int; delete p; p = NULL; delete p; ; } 3.智能指针的实现思想:使用可以自动销毁的局部对象来描述不可以自动销毁的位于堆空间中的…
本文同时发布在我的个人博客上,欢迎访问~ www.seekingdream.cn 在读完K&R之后,对C的认识就是指针.数组.网上的人们对指针也有些“敬而远之”的感觉.最近从同学处淘得<征服C指针>一书,首先映入眼帘的是封面的“毒舌程序员”这个称号.用这个周末的时间,把这本书读了一下,最大的感受确实是“毒舌”.下面细细谈谈自己的几点感受吧! 1.看到这本书的时候,想到的是西游记.本书的作者就是西游记中的“孙悟空”,纵使其有百般武艺,却始终摆脱不了“如来”的五指山.哪谁是“如来”呢?自然…
Go语言学习笔记九: 指针 指针的概念是当时学C语言时了解的.Go语言的指针感觉与C语言的没啥不同. 指针定义与使用 指针变量是保存内存地址的变量.其他变量保存的是数值,而指针变量保存的是内存地址.这个内存地址可能保存者一个基本数值. 指针变量也是有类型的.它需要知道自己保存的内存地址指向数值的类型,因为不同的数值类型占用的空间大小是不同的. 在指针中有两个重要的符号需要了解: &和. 其中&是用于获取普通变量的地址,而是获取内存地址指向的数值.看起来就是一对反向操作. 另外在声明指针时也…
本系列教程供个人学习笔记使用,如果您要浏览可能需要其它编程语言基础(如C语言),why?因为我写得烂啊,只有我自己看得懂!! 标准输入输出一.输入 在sublime中这个时候需要安装SublimeREPL插件. Ctrl+shift+p 键入 install packages,再继续键入 SublimeREPL 安装即可然后每次编译运行的操作是:tools->sublimeREPL->python->python-Run current file.点击之后会出现新的页面*REPL*[py…
Chapter6.h #ifndef __CHAPTER_6_ #define __CHAPTER_6_ /*<深入理解C指针>学习笔记 -- 第六章*/ typedef struct __person { char* name; char* title; unsigned int age; }person; /*结构体内存的释放问题*/ void __struct_memory_test(); #endif Chapter6.cpp #include "Chapter6.h&quo…
Chapter2.h #ifndef __CHAPTER_2_ #define __CHAPTER_2_ /*<深入理解C指针>学习笔记 -- 第二章*/ /* 内存泄露的两种形式 1.忘记回收内存 2.内存地址丢失 */ void __memory_leak_test(); /* 内存操作的几个函数 malloc alloc realloc free */ void __memory_function_test(); #endif Chapter2.cpp #include "Ch…
Chapter5.h #ifndef __CHAPTER_5_ #define __CHAPTER_5_ /*<深入理解C指针>学习笔记 -- 第五章*/ /*不应该改动的字符串就应该用 const char* 去修饰*/ size_t __strlen_test(const char*); /*返回字符串的几种方法*/ char* __return_str__test(); #endif Chapter5.cpp #include "Chapter5.h" #includ…
[C++学习笔记14]动态创建对象   C#/Java中的反射机制 动态获取类型信息(方法与属性) 动态创建对象 动态调用对象的方法 动态操作对象的属性 前提:需要给每个类添加元数据 动态创建对象 实现原理:通过定义一个宏REGISTER_CLASS,传入类名,在该宏中创建一个类独有的Register类,类中定义静态方法创建对象(new)并返回指针,并在该类中定义一个公共Register类的成员变量,在该公共Register类的构造函数中调用工厂类的Register方法注册类名与创建对象的函数指…
#include <stdio.h> #include <windows.h> #include <mmsystem.h> #include <string.h> typedef struct _accoutn { char *name;//定义用户名 char *bankName;//定义银行名称 double limit;//定义银行卡额度 double Nowmoney;//定义现在银行卡金额 }Account; double Getload(cons…
一般的智能指针都是通过一个普通指针来初始化,所以很容易写出以下的代码: #include <iostream> using namespace std; int func1(){ //返回一个整数的函数 } void func2(AutoPtr<int*> ptr,int t){ //一些操作 } int main(){ func2(AutoPtr<int*>(new int(5)),func1()); //其他操作 } 乍一看,这段代码好像没有什么问题,但实则暗藏隐患…
智能指针是一个类对象,而非一个指针对象. 原始指针:通过new建立的*指针 智能指针:通过智能指针关键字(unique_ptr, shared_ptr ,weak_ptr)建立的指针 它的一种通用实现方法是采用引用计数的方法.智能指针将一个计数器与类指向的对象相关联,引用计数跟踪共有多少个类对象共享同一指针. 每次创建类的新对象时,初始化指针并将引用计数置为1: 当对象作为另一对象的副本而创建时,拷贝构造函数拷贝指针并增加与之相应的引用计数: 对一个对象进行赋值时,赋值操作符减少左操作数所指对象…