指针变量

四、指针的使用

北慕城南 提交于 2020-01-21 10:08:22
1.指针赋值 ① int i , *p , *q; p = &i;//p获取i的地址 q = p;//指针变量p把地址拷贝给指针变量q *p = 1;//改变i的值为1 *q = 2;//改变i的值为2 ② int i , j , *p , *q; p = &i;//指针变量i获取i的地址 q = &j;//指针变量q获取j的地址 i = 1;//给i赋值为1 *q = *p;//把指针p的值拷贝给指针q printf(“%d %d\n”,*p,*q);//输出 2.指针与一维数组 ①数组名代表数组的首地址,是一个地址常量,即数组首元素地址 示例: void printfMaxValueOfArray(int array[] , int count); void printfMaxValueOfArray(int array[] , int count){ int max = 0; for(int i = 0 ; i < count ; i ++){ if(max < array[i]){ max = array[i]; } } printf(“max = %d”,max); } int main(){ int number[] = {10,20,15,3,8,9,100}; printfMaxValueOfArray(number,sizeof(number) / sizeof

c++中指针作为函数参数的详细理解

一笑奈何 提交于 2020-01-21 10:08:06
在C语言中,函数的参数不仅可以是整数、小数、字符等具体的数据,还可以是指向它们的指针。用指针变量作函数参数可以将函数外部的地址传递到函数内部,使得在函数内部可以操作函数外部的数据,并且这些数据不会随着函数的结束而被销毁。 像数组、字符串、动态分配的内存等都是一系列数据的集合,没有办法通过一个参数全部传入函数内部,只能传递它们的指针,在函数内部通过指针来影响这些数据集合。 有的时候,对于整数、小数、字符等基本类型数据的操作也必须要借助指针,一个典型的例子就是交换两个变量的值。 有些初学者可能会使用下面的方法来交换两个变量的值: 1 2 3 4 5 6 7 8 9 10 11 12 13 #include <stdio.h> void swap( int a, int b){ int temp; //临时变量 temp = a; a = b; b = temp; } int main(){ int a = 66, b = 99; swap(a, b); printf ( "a = %d, b = %d\n" , a, b); return 0; } 运行结果: a = 66, b = 99 从结果可以看出,a、b 的值并没有发生改变,交换失败。这是因为 swap() 函数内部的 a、b 和 main() 函数内部的 a、b 是不同的变量,占用不同的内存,它们除了名字一样

指针初接触

拥有回忆 提交于 2020-01-20 21:48:43
指针是强大的C语言工具 指针指向地址 1. 定义指针:   使用指针之前要定义指针,与int, char, float类似的定义方式,不过要在定义类型和指针名之间加一个 * 号来表示定义的是指针,不带 * 号会导致定义的为变量而非对应型号的指针。     例子:int * pointer1; 就是定义了一个名为pointer1的int型指针,指针只能指向 其地址存放的是int型数据的变量。(“其”在这里指的是变量) 2. 初始化指针:   使用指针之前还要初始化指针,否则指针有可能会覆盖掉数据(我看的课程里都是这么说的,为避免可能的错误,我选择相信)     例子:int * pointer1 = NULL; 就是将指针pointer1初始化为空。 3. 指针赋值:   如果初始化指针时要指针有所指向,那么就要用地址符&来为指针确定指针指向的地址。     例子:int i; int * pointer1 = NULL; pointer1 = &i; 就是将指针pointer1指向整型变量 i 的地址。 4. 指针打印   读取指针的值也非常简单,就是指针自己本身加间接运算符 * 即可     例子:int i = 9; int * pointer 1 = NULL; pointer1 = &i; printf("%d", *pointer1); 指针指向的是地址

layout(poj3169)

不羁的心 提交于 2020-01-20 17:02:45
1,我似乎找到了些。。彻底学习解决这些东西的方法。。 2,嗯。。这个关键是你怎么能转换成图的思想。。图的问题。。打眼一看,我觉得一般人肯定看不出来。。 3,这个要用的BELLMANFORD算法,所以赶紧学学搞个模板。 4,学习知识最简单的方法就是拿个例子给你讲。 嗯,模板让我感觉奇奇怪怪的。 5,还好这代码一遍就过了 #include<iostream> #include<algorithm> #define max 1005 //const int max=1005; const int INF=100000005; using namespace std; int n,ml,md; int al[max],bl[max],dl[max]; int ad[max],bd[max],dd[max]; int d[max]; bool updated; void update(int& x,int y) { if(x>y) { x=y; updated=true; } } void bellmanford() { for(int k=0;k<=n;k++) { updated=false; for(int i=0;i+1<n;i++) { if(d[i+1]<INF) update(d[i],d[i+1]); } for(int i=0;i<ml;i++) { if(d[al[i]

c++知识回顾

流过昼夜 提交于 2020-01-20 04:51:24
静下心来回顾学过的知识,随脑中思考到的书写。 相对c语言更多了引用、指针的更多使用,增加类的实现对象,类的构造函数和析构函数,类的继承等等。需要理解类继承过程中对象的构造函数和析构函数的执行顺序,虚函数的作用,友元函数等。当然还有异步、vector、map等,这些掌握不深,先不提。 类和对象 类是一个简单的对象的魔性,由变量和函数组成,对象使用这些变量来存放信息,调用这些函数来完成操作。 c++允许在类中可以声明常量,不充许对他进行赋值,否则出错;但声明前加static变为静态变量则可以。(具体原因需了解常量、静态变量的存储区域,以及类的存储区域) 构造函数和通用方法的区别: 构造函数名字和类名一样;系统在创建某个类的实例时会第一时间调用这个类的构造函数;构造函数永远不会返回任何值;每个类中至少有一个构造函数,如果没有在类中定义一个构造函数,编译器则会执行无参的默认构造函数。 this指针 静态成员函数不存在this指针,非静态成员函数存在this指针,“this指针”指向成员函数作用的对象,在成员函数执行的过程中,正是通过“this指针”才能找到对象所在的地址,因而也就能找到对象的所有非静态成员变量的地址。 逗号运算符 eg:x=(w1,w2,…,wn),对所有的wi表达式从左到右开始计算直到wn,最后将wn的值赋给x 字符串 在自定义的字符串中,‘\0’为字符串结束的标志

指针和数组计算大小(sizeof()和strlen()的对比)

醉酒当歌 提交于 2020-01-20 01:34:14
/**--------------------------------------------------------------- * @brief 指针和数组变量sizeof()和strlen()的比较 * *---------------------------------------------------------------*/ int point_array_init ( ) { int * PointOne = "123456" ; char * PointTwo = "123456" ; char * PointThree = "123456\0" ; int ArrayOne [ 6 ] = { 1 , 2 , 3 , 4 , 5 , 6 } ; char ArrayTwo [ 6 ] = { 1 , 2 , 3 , 4 , 5 , 6 } ; char ArrayThree [ 7 ] = { 1 , 2 , 3 , 4 , 5 , 6 , '\0' } ; printf ( "\n\t|-------------------------------------------------------------------------\n" ) ; printf ( "\t| int *Point: | " ) ; printf ( "sizeof(Point

c++ ptrdiff_t 类型

戏子无情 提交于 2020-01-20 00:32:54
ptrdiff_t是C/C++标准库中定义的一个与机器相关的 数据类型 。ptrdiff_t类型 变量 通常用来保存两个 指针 减法操作的结果。ptrdiff_t定义在stddef.h(cstddef)这个文件内。ptrdiff_t通常被定义为long int类型。 ptrdiff_t定义在C99标准中。 ptrdiff_t 标准库类型(library type)ptrdiff_t 与 size_t 类型一样, ptrdiff_t 也是一种与机器相关的类型,在 cstddef 头文件中定义。size_t 是unsigned 类型,而 ptrdiff_t 则是 signed 整型 [1] 。 size_t 这两种类型的差别体现了它们各自的用途: size_t 类型用于指明数组长度,它必须是一个正数;ptrdiff_t 类型则应保证足以存放同一数组中两个指针之间的差距,它有可能是负数。 difference_type 是signed类型,表示迭代器差距,vector<int>:: difference_type = iter1-iter2. ptrdiff_t与difference_type区别,前面的是c++定义的标准,后面则是STL定义的 。 int *a=new int(1); int *b=new int(2); ptrdiff_t result=a-b; cout<<a<

ARM 汇编基础

你。 提交于 2020-01-19 18:47:10
转载连接: 1 ARM汇编以及汇编语言基础介绍 2 ARM汇编中的数据类型 3 ARM汇编常用指令集 4 ARM汇编内存访问相关指令 5 ARM汇编之连续存取 6 ARM汇编之条件执行与分支 7 ARM汇编之栈与函数 英文原文链接: https://azeria-labs.com/arm-data-types-and-registers-part-2/ 本文只是转载部分内容,具体请参考原文。 1. ARM汇编基础介绍 1.1 ARM VS. INTEL ARM处理器Intel处理器有很多不同,但是最主要的不同怕是指令集了。Intel属于复杂指令集(CISC)处理器,有很多特性丰富的访问内存的复杂指令集。因此它拥有更多指令代码以及取址都是,但是寄存器比ARM的要少。复杂指令集处理器主要被应用在PC机,工作站以及服务器上。 ARM属于简单指令集(RISC)处理器,所以与复杂指令集先比,只有简单的差不多100条指令集,但会有更多的寄存器。与Intel不同,ARM的指令集仅仅操作寄存器或者是用于从内存的加载/储存过程,这也就是说,简单的加载/存储指令即可访问到内存。这意味着在ARM中,要对特定地址中存储的的32位值加一的话,仅仅需要从内存中加载到寄存器,加一,再从寄存器储存到内存即可。 简单的指令集既有好处也有坏处。一个好处就是代码的执行变得更快了。

unix环境高级编程 第七章 进程环境

喜欢而已 提交于 2020-01-19 15:11:59
第七章 进程环境 7.1 引言 本章将学习:程序执行时,main函数时如何让被调用的;命令行参数如何传递给新程序的;典型的存储空间布局是什么样式;如何分配另外的存储空间;进程如何使用环境变量;进程的各种不同终结方式等。另外还将说明longjmp和setjmp函数以及它们与栈的交互作用。 7.2 main函数 当内核执行main函数前,会调用一个特殊的启动例程。连接编辑器设定该启动例程为程序的起始地址。连接编辑器则由C编译器调用。 7.3 进程终止 有8种不同的方式使的进程终止,其中5种为正常终止方式 从main返回; 调用exit; 调用_exit或_Exit; 最后一个线程从启动例程返回; 从最后一个线程调用pthread_exit 三种异常终止方式 调用abort 接到一个信号 最后一个线程对取消请求作出相应 退出函数 三个函数用于正常终止一个程序:_exit和_Exit立刻进入内核,exit则先执行一些清理处理,然后返回内核。 # include <stdlib.h> void exit ( int status ) ; void _Exit ( int status ) ; # include <unistd.h> void _exit ( int status ) ; exit函数总是执行一个标准I/O库的清洗关闭操作:对于所有打开流调用fclose函数

云计算之go语言——基础语法(中)

雨燕双飞 提交于 2020-01-19 14:18:32
9 Go 语言循环语句 1, 概念 在不少实际问题中有许多具有规律性的重复操作,因此在程序中就需要重复执行某些语句。 2, 分类 1. for 循环 : 重复执行语句块 a. 语法: for init; condition; post {} for condition {} for {} init: 一般为赋值表达式,给控制变量赋初值; condition: 关系表达式或逻辑表达式,循环控制条件; post: 一般为赋值表达式,给控制变量增量或减量。 b. 实例 for02.go package main import "fmt" func main() { sum := 0 for i := 0 ; i <= 10; i++ { sum += i } fmt.Println(sum) } for03.go package main import "fmt" func main() { sum :=1 for ; sum <=10 ; { sum +=sum } fmt.Println(sum) for sum <= 10 { sum +=sum } fmt.Println(sum) } c. For-each range 循环 这种格式的循环可以对字符串、数组、切片等进行迭代输出元素。 实例: for04.go package main import "fmt" func