指针

2019春总结作业

北慕城南 提交于 2020-01-04 23:14:34
一、我学到的内容(整理本课程所学,用思维导图的方式,思维导图的工具可以使用:XMind) 二、我的收获(包括我完成的所有作业的链接+收获) 作业名称 链接 收获 第二周编程总结 https://www.cnblogs.com/ZHLJ477/p/10498263.html 文件的建立 第三周编程总结 https://www.cnblogs.com/ZHLJ477/p/10537427.html 二维数组的基本定义 第四周编程总结 https://www.cnblogs.com/ZHLJ477/p/10570561.html 冒泡排序法;选择排序法 第五周编程总结 https://www.cnblogs.com/ZHLJ477/p/10622312.html 判断回文 第六周编程总结 https://www.cnblogs.com/ZHLJ477/p/10645780.html 指针的定义,应用 第七周编程总结 https://www.cnblogs.com/ZHLJ477/p/10684566.html 数组名作为函数参数的用法 第八周编程总结 https://www.cnblogs.com/ZHLJ477/p/10722816.html 用字符串函数以及使用指针操作字符串的方法,掌握动态内存分配 第九周编程总结 https://www.cnblogs.com/ZHLJ477/p

指针基本概念分析

﹥>﹥吖頭↗ 提交于 2020-01-04 09:07:15
文章目录 1 指针 1.1 *号的意义 1.2 传值调用与传址调用 1 指针 1.1 *号的意义 *号: 在指针声明时,*号表示所声明的变量为指针。 在指针使用时,*号表示取指针所指向的内存空间中的值。 小贴士: 对于指针我们需要知道: 指针是C语言中一种特别的变量。 指针所保存的值是内存的地址。 可以通过修改指针修改内存中的任意地址内容。 1.2 传值调用与传址调用 传值调用与传址调用: 指针是变量,因此可以声明指针参数。 当一个函数体内部需要改变实参的值,则需要使用指针参数。 函数调用时实参值将复制到形参。 指针适用于复杂数据类型作为参数的函数中。 # include <stdio.h> int swap ( int * a , int * b ) { int c = * a ; * a = * b ; * b = c ; } int main ( ) { int aa = 1 ; int bb = 2 ; printf ( "aa = %d, bb = %d\n" , aa , bb ) ; swap ( & aa , & bb ) ; printf ( "aa = %d, bb = %d\n" , aa , bb ) ; return 0 ; } 参考资料: C语言进阶剖析教程 来源: CSDN 作者: SlowIsFastLemon 链接: https://blog

指针变量引用

依然范特西╮ 提交于 2020-01-04 09:06:33
# include <iostream> using namespace std ; int main ( ) { int a = 1 ; int b = 10 ; int * p = & a ; //指针变量p指向a int * & pa = p ; //pa是p的指针引用 ( * pa ) ++ ; //pa指针指向的内容+1,pa是p的引用,p指向的内容+1,即a+1 cout << "a=" << a << endl ; //a=2 cout << "b=" << b << endl ; cout << "*p=" << * p << endl ; //*p=a pa = & b ; //pa指向b ( * pa ) ++ ; //b+1 cout << "a=" << a << endl ; cout << "b=" << b << endl ; cout << "*p=" << * p << endl ; //*p=b return 0 ; } 来源: CSDN 作者: alike_meng 链接: https://blog.csdn.net/alike_meng/article/details/103794588

动态内存分配与指向它的指针变量

谁说我不能喝 提交于 2020-01-04 05:49:44
1.动态内存分配的含义   c语言允许建立动态内存分配区域,以存放一些临时用的数据,这些数据不必再程序的声明部分定义,也不必等到函数结束时才释放,而是要随时开辟,不需要随时释放,这些数据是临时存放在一个特定的自由存储区(堆),可以根据需要向系统申请所需要大小的空间,由于未在声明部分定义它们为变量或数组,因此不能通过变量名或数组名去引用这些数据,只能通过指针来引用。 2.建立内存的动态分配   对内存的动态分配是通过系统提供的函数库来实现的,主要有malloc,calloc,free,realloc这四个函数: (1).使用malloc函数   其函数原型为void *malloc(unsigned int size);   其作用是在内存的动态存储区域中分配一个长度为size的连续空间,形参size的类型定义为无符号整形(不允许为负数)。次函数的值(即返回值)是所分配区域的第一个字节的地址,或者说,次函数是一个指针型函数,返回的指针指向该分配区域的开头位置,如:   malloc(100)//开辟100字节的临时分配区域,函数值为其第一个字节的地址   注意其指针的基类型为void,即不能执行任何类型的数据,只能提供一个地址,如果此函数未能成功执行(如内存空间不足),则返回空指针。 (2).使用calloc函数   其函数原型为void *calloc(unsigned n,

指针的使用

回眸只為那壹抹淺笑 提交于 2020-01-04 05:49:15
学习链接: http://www.icourse163.org/learn/ZJU-200001?tid=1002316004#/learn/content?type=detail&id=1003086473&cid=1003636045 指针的应用场景 1.交换两个变量 2.函数返回多个值,某些值就只能通过指针返回   传入的参数实际上是需要保存带回的结果的变量 3.函数返回运算的状态,结果通过指针返回 传入函数的数组成了什么? 函数参数表中的数组实际上是指针   sizeof(a)=sizeof(int *) 但是可以用数组的运算符[]进行运算 数组参数 以下四种函数原型是等价的: int sum(int *ar, int n) int sum(int *,int) int sum(int ar[], int n) int sum(int [],int) 数组变量是特殊的指针 数组变量本身表达地址,所以   int a[10]; int *p=a;   但是数组的单元表达的是变量,需要用&取地址   a==&a[0] []运算符可以对数组做也可以对指针做:   p[0]<==>a[0] *运算符可以对指针做,也可以对数组做   *a=25 数组变量是const的指针,所以不能被赋值 int a[] -->int * const a 指针与const 指针是const

C语言指针与数组

亡梦爱人 提交于 2020-01-04 05:49:02
C语言指针与数组 数组的下标应该从0还是1开始? 我提议的妥协方案是0.5,可惜他们未予认真考虑便一口回绝 -- Stan Kelly-Bootle 1. 数组并非指针 为什么很多人会认为指针和数组始终应该可以互换的呢? 因为对数组的引用总是可以写成对指针的引用,而且确实存在一种指针和数组的定义完全相同的上下文环境, 不幸的是,这只是数组的一种极为普通的用法,并非所用情况下都是如此。 2. 什么是声明,什么是定义 C语言中对象必须有且只有一个定义,但它可以有多个extern声明. 定义:只能出现在一个地方, 确定对象的类型并分配内存 ,用于创建新的对象,例如 int a[100] 声明:可以多次出现,描述对象的类型,用于指代其他地方定义的对象(例如在其他文件里) 例如 extern int a[100] extern对象声明告诉编译器对象的类型和名字,对象的内存分配则在别处进行 3. 数组与指针的区别 出现在赋值左边的符号被称为 左值, 出现在赋值右边的符号被称为 右值。 编译器为每个变量分配一个地址(左值),这个地址在编译时可知,并且该变量在运行时一直保存于这个地址中。 存储于变量中的值(右值)只有在运行时才可知,如果需要用到变量中存储的值,编译器就发出指令从指定地址读入变量并将它存于寄存器中。 例如: char a[9] = "abcdefgh"; c = a[i]

数组、字符串和指针

会有一股神秘感。 提交于 2020-01-04 05:48:46
1.如何使用数组   数组就是一组名为数组元素或简称元素的内存位置,各个内存位置可以存储相同数据类型的数据项,而我们可以用相同的变量名引用所有内存位置。 2.如何声明和初始化不同类型的数组   声明数组:例如 long height[6];   初始化数组:例如 int engine_size[5] = {200, 250, 300, 350, 400};   C++11标准定义了一种表示一组初始值的新的统一方式,对于用这种方式初始化的所有对象,这些初始值都是相同的,包括标准模板库容器和数组。   例如:int value[]{2,3,4}; 有了这种语法,=操作符就是不必要的。 3.如何对数组使用基于范围的for循环   例如: double temperatures[] = {65.5, 68.0, 75.0, 77.5, 76.4, 73.8, 80.1};       double sum = 0.0;       int count = 0;       for(double t : temperatures){         sum += t;         ++count;       }       double average = sum/count;   还可以使用auto关键字来编写该循环:     for(auto temperature :

指针和动态数组 new ,delete

╄→гoц情女王★ 提交于 2020-01-04 05:48:30
............心中要有一内存块,以便理解知识 计算机储存数据必须知道数据的3种属性: 1.存储在何处.......并起名 2.值 3.类型 (1)int a;a=30; (2)int *b=&a; (3).int *a,b;注意...整型....指针a,整型...变量b,对每个指针都要有一个*; .......................指针.......................................... 1.指针是一个变量,存储的是...值的地址,而不是值本身, 指针变量 是指向特定变量类型指针,和数组相似 ..int* tax;...............指向int变量的指针,又叫整型指针 ..double * str;.............指向double变量的指针 ..int 指针和double指针虽然指向的数据类型不同, 但这两个变量本身长度的通常是一样的,好比1016可能是超市的地址,也可能是,村庄的地址一样,.....地址的长度或值,不能指示该地址上有什么建筑物,也不指示有关变量的长度或类型的任何信息 .显示地址,cout常用16进制 .......................指针与c++原理.......................................... oop强调的是运行阶段进行决策; 如

c++ primer 3

寵の児 提交于 2020-01-04 05:48:17
1. p104 用new来分配内存 对于指针,new分配的内存块通常与常规变量声明分配的内存块不同。变量都存储在栈的内存区域,而new从被称为堆或自由存储区的内存区域分配内存。 用delete 释放内存(与new配对使用) 2. p105 使用动态数组 int *psome = new int[10]; 释放 delete [] psome; double *p3 = new double[3]; p3 = p3 + 1; 不能修改数组名的值 , 但是指针是变量,因此可以修改它的值,加1以后,增加的量等于指向类型的字节数,它指向下一个元素的地址。 3.p109 指针小结 声明 double * pn; 赋值 :应将内存地址赋给指针,可以对变量名应用&运算符,来获得被命名的内存的地址,new运算符返回未命名的内存的地址。 对指针解除引用:获得指针指向的值,即*pn是指向的值。 使用方括号数组表示法等同于对指针解除引用 *(coats+4) coats[4] 4.问题p111-113 5.p114 使用new创建动态结构 infalatable *ps = new inflatable; 不能将成员运算符句点用于结构名,用箭头成员运算符 -> eg: ps->price 6.p117 自动存储 (自动变量)是一个局部变量。通常存储在栈中。 静态存储 两种方法,一种在函数外面定义,

指针知识(三):指针与数组

自作多情 提交于 2020-01-04 05:47:52
数组的概念与指针的概念联系非常解密。其实 数组的标识 相当于它的 第一个元素的地址 ,如:int a[5],数组名a指向它的第一个元素a[0]的地址。 有语句如下: int a[5]; int * p; 下面的赋值为合法的: p = a; 这里指针p 和a 是等价的,它们有相同的属性,唯一的不同是我们可以给指针p赋其它的数值,而a 总是指向被定义的5个整数组中的第一个。所以,p只是一个普通的指针变量,而与之不同,a 是一个指针常量(constant pointer),数组名的确是一个指针常量。因此虽然前面的赋值表达式是合法的,但下面的不是: a = p; 因为a 是一个数组(指针常量),常量标识不可以被赋其它数值。 由于变量的特性,以下例子中所有包含指针的表达式都是合法的: #include <iostream> using namespace std; int main() { int a[5]; int *p; p = a;      //p是a[0]的地址,因a指向a的首地址,即指向a[0], *p = 10;    //即a[0]=10 p++; *p = 20;   //a[1]=20 p = &a[2]; *p = 30;   //a[2]=30; p = a +3; *p = 40;    //a[3]=40 p = a; *(p+4) = 50; //a[4]=50