指针数组

C. 实验10_5_指针数组初步

戏子无情 提交于 2019-12-13 19:35:41
题目描述 已知一个总长度不超过10000的字符串,字符串中只包含大写字母“A—Z”、小写字母“a—z”和空格‘ ’。空格用于分割单词,空格的个数不超过1000个。你的任务是将字符串中用空格分隔的单词打印出来。 你要按照如下要求完成任务: 1.利用指针数组指向每个单词的开始位置。 2.把字符串中单词结束后的空格改为“\0”,然后使用指针数组将每个单词打印出来。 3.不可直接输出或使用二维数组输出单词。 输入与输出要求:输入一个字符串,满足题目描述,占一行。输出这个字符串中的单词,每个单词占一行。 程序运行效果: Sample 1: You are great↙ You↙ are↙ great↙ Sample 2: itisalongword↙ itisalongword↙ # include <stdio.h> int main ( ) { int i , isempty = 0 , n = 1 ; char ch [ 10001 ] ; char * address [ 1001 ] ; gets ( ch ) ; address [ 0 ] = ch ; for ( i = 0 ; ch [ i ] != '\0' ; i ++ ) { if ( ch [ i ] == ' ' ) { if ( isempty == 0 ) { ch [ i ] = '\0' ; isempty

数组指针和指针数组

走远了吗. 提交于 2019-12-13 16:17:01
数组指针(也称行指针) 定义 int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。 如要将二维数组赋给一指针,应这样赋值: int a[3][4]; int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。 p=a; //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0] p++; //该语句执行过后,也就是p=p+1;p跨过行a[0][]指向了行a[1][] 所以数组指针也称指向一维数组的指针,亦称行指针。 指针数组 定义 int *p[n]; []优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,它有n个指针类型的数组元素。这里执行p+1时,则p指向下一个数组元素,这样赋值是错误的:p=a;因为p是个不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它们分别是指针变量可以用来存放变量地址。但可以这样 *p=a; 这里*p表示指针数组第一个元素的值,a的首地址的值。 如要将二维数组赋给一指针数组: int *p[3]; int a[3][4]; p++; //该语句表示p数组指向下一个数组元素。注:此数组每一个元素都是一个指针 for(i=0;i<3;i++) p[i]=a

【C++】对指针形参及指针数组分配内存空间

寵の児 提交于 2019-12-11 18:37:20
在使用指针作为函数形参的时候,和数组首地址作为函数形参的用法一致。但指针和数组有一个重要区别是指针指向的地址可能为空,而数组的首地址一定会指向一段地址空间的。因此在使用指针作为函数形参,并在函数内申请内存空间时,传入的应该为指针的地址。而在释放该地址空间时,直接传该指针即可。 另外还要区分指针数组和数组指针的区别。运算优先级为 () > [] > * #include <iostream> #include<stdio.h> #include<stdlib.h> using namespace std; //指针传递的是一个变量,或者一个值的地址,它本身还是采用值传递的方式。 //***不能使指针在函数内指向另一块地址,但可以改变它指向空间的值。*** //一维指针传参申请内存空间及赋值 //传入的应该是指针的地址 void fun(int** p) { *p = new int[5]; for(int i=0;i<5;i++){ //*p应该为一个单位进行赋值,表示的是取p的值(*p);()不可缺 (*p)[i] = i; } } //数组传递,可以只传递数组首地址 void funa(int *p) { for(int i=0;i<5;i++){ p[i] = i; } } //二维指针传参申请内存空间及赋值 //传入的应该是指针的地址 void fun2(int*** p)

python数学库

烈酒焚心 提交于 2019-12-11 14:40:37
python数学库 本文是学习机器学习过程中的一些笔记,难免有些错误,请批评指正 numpy 标准Python的列表(list)中,元素本质是对象,如:L = [1, 2, 3],需要3个指针和三个整数对象,对于数值运算比较浪费内存和CPU。因此,Numpy提供了np.array()来存储单一数据类型的多维数组。Numpy对于数组(矩阵)的运算速度比list要快。 使用array创建 # 通过array函数传递list对象 L = [1, 2, 3, 4, 5, 6] a = np.array(L) print "a = ", a print type(a) 也可以这样创建numpy多维数组 b = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]) print b 数组的大小(行,列)可以通过shape属性来获得 print a.shape 也可以对数组大小进行强制修改,注:从(3,4)改为(4,3)并不是对数组进行转置,而只是改变每个轴的大小,数组元素在内存中的位置并没有改变。 a.shape = 4, 3 当某个轴为-1时,将根据数组元素的个数自动计算此轴的长度 b.shape = 2, -1 使用reshape方法,可以创建改变了尺寸的新数组,原数组的shape保持不变,数组b和c共享内存

行指针的使用——*(*(pointer + row) + col)是什么意思

落爺英雄遲暮 提交于 2019-12-11 01:40:29
行指针的使用—— ( (pointer + row) + col)是什么意思 用指针分别指向二维数组中的一个元素和二维数组中的一个子数组的时候,可以形象的称指向单个元素的为列指针,指向子数组的指针为行指针。 # include <stdio.h> int main ( ) { int array [ 3 ] [ 4 ] = { { 1 , 2 , 3 , 4 } , { 5 , 6 , 7 , 8 } , { 9 , 10 , 11 , 12 } } ; int ( * pointer ) [ 4 ] , row , col ; //pionter为一个行指针 pointer = array ; printf ( "Input row = " ) ; scanf_s ( "%d" , & row ) ; printf ( "Input col = " ) ; scanf_s ( "%d" , & col ) ; printf ( "array[% 1d][% 1d] = % d\n" , row , col , * ( * ( pointer + row ) + col ) ) ; } 定义1个3X3的二维数组,求出每行的最大值,保存至1个一维数组。要求使用行指针完成访问每个元素,求最大值的功能。 # include <iostream> using namespace std ;

数组的.length()方法对数组.hasNext()方法影响

青春壹個敷衍的年華 提交于 2019-12-10 17:21:26
.length()方法会将数组的指针移动到数组末尾,导致.hasNext()方法无法正常使用。 再写mongodb的一个程序段的时候想用.length()方法获得数组的长度,接着又用到.hasNext()方法, while (数组.hasNext()),程序根本不进while循环体,所以想到了会不会是.length()方法的问题,一检测,果然是。 显然控制台打印出了5,但是并没有打印while()里面的东西,显然就是没有进while(),即cursor.hasNext()为假,即为空,分明有东西,为什么为空呢???仔细一想,是在计算数组的长度时,指针被放到了数组末尾。 我们重新定义一边那个数组,将指针放到本来在的地方,即数组起始位置的前一个位置,此时,进while了,并且正常执行 来源: CSDN 作者: 一碗手擀面 链接: https://blog.csdn.net/qq_29274865/article/details/103477658

jni详解(摘自《jni详解》)

北战南征 提交于 2019-12-10 14:08:18
本书涵盖了 Java Native Interface(JNI)的内容,将探讨以下问题: • 在一个 Java 项目中集成一个 C/C++库 • 在一个用 C/C++开发的项目中,嵌入 JavaVM • 实现 Java VM • 语言互操作性问题,特别是互操作过程中的垃圾回收(GC, garbage collection)和并 发编程(multithreading) 译注: JNI(Java Native Interface)是 SUN 定义的一套标准接口,如 Dalvik, Apache Harmony 项目...等 Java 虚拟机,都会实现 JNI 接口,供本地(C/C++)应用与 Java VM 互调。 JNI: 可以供 Java 代码调用本地代码,本地代码也可以调用 Java 代码,即上文列出的第 4 条内容:语言互操作;所以,这是一套完善而功能强大的接口。 可能有朋友听说过 KNI,那是 J2ME VM(CLDC)中定义的一套东西,不如 JNI 强大。 此外,因为 C/C++在系统编程领域的地位,只要打通了与 C/C++的接口,就等于是天堑变 通途。 首先,通过本书,你会很容易的掌握 JNI 开发,并能了解到方方面面的关于 JNI 的知识。 本书详尽的叙述,会带给你你很多如何高效使用 JNI 的启示。JNI 自 1997 年初发布以来, Sun 的工程师们和 Java

双指针

那年仲夏 提交于 2019-12-10 02:15:28
给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 示例 1: 给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。 你不需要考虑数组中超出新长度后面的元素。 示例 2: 给定 nums = [0,1,2,2,3,0,4,2], val = 2, 函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。 注意这五个元素可为任意顺序。 你不需要考虑数组中超出新长度后面的元素。 说明: 为什么返回数值是整数,但输出的答案是数组呢? 请注意,输入数组是以“引用”方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。 你可以想象内部操作如下: // nums 是以“引用”方式传递的。也就是说,不对实参作任何拷贝 int len = removeElement(nums, val); // 在函数里修改输入数组对于调用者是可见的。 // 根据你的函数返回的长度, 它会打印出数组中该长度范围内的所有元素。 for (int i = 0; i < len; i++) {

用指针实现数组长度的改变

风流意气都作罢 提交于 2019-12-09 20:45:41
用指针实现数组长度的改变 在一些问题中,我们常常要对数组的长度和元素进行改变,例如在比较两个实数A与B的值是否相等。当A与B的值都非常大的时候,仅仅使用关系运算符来比较是无法完成的。这时候,我们就要将A与B用字符数组的形式进行存储。 我们可以定义 char num1[100000],num2[100000] 来分别存储A与B的值。在使用 strcmp(num1,num2) 来进行比较。但有时候A与B的值并不一定是标准的实数,例如 A=00012345.00 B=+12345 ,这时候就需要去掉字符串里面多余的 '+' , '0' , '.' 。 对于处于字符串末位的 ‘0’与 '.' ,我们只需要将其变成字符串结束标志 '\0' 即可。但对于字符串前面的 '+' 与 '0' 就相对难以处理。我们可以用字符串后面的元素来将其覆盖。例如假设 num1="+0000345" ,我们可以用 for(i=0;i<8;i++) num1[i]=num[i+5] 来进行处理。但是如果字符串 num1 的长度非常大,这样处理会导致程序运行时间过长,所以我们就要用到指针。 定义 char *p=num1 ,我们知道当指针变量指向数组或字符串的时候,其表示此数组或字符串的首地址,即 p=&num1[0] ,所以我们可以改变指针变量 p ,的值,使其指向字符串的第一个非0元素,即 p=&num1[5]

LeetCode第26题

≯℡__Kan透↙ 提交于 2019-12-09 19:27:08
题目概述 力扣:第二十六题 难易:简单 内容: 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 示例 1: 给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出新长度后面的元素。 示例 2: 给定 nums = [0,0,1,1,1,2,2,3,3,4], 函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。 你不需要考虑数组中超出新长度后面的元素。 说明: 为什么返回数值是整数,但输出的答案是数组呢? 请注意,输入数组是以“引用”方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。 你可以想象内部操作如下: // nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝 int len = removeDuplicates(nums); // 在函数里修改输入数组对于调用者是可见的。 // 根据你的函数返回的长度, 它会打印出数组中该长度范围内的所有元素。 、、、 for (int i = 0; i < len; i++) { print(nums[i]); } 来源:力扣