c语言指针

C博客作业05--2019-指针

坚强是说给别人听的谎言 提交于 2019-12-06 06:35:54
展示PTA总分 1.本章学习总结 1.1 学习内容总结 1、关于指针是什么 ·指针是用来存放地址的变量 ·C语言中把专门用来存放变量的地址的变量称为“指针变量”,简称指针 ·如果一个指针变量的值是另一个变量的地址,就称该指针变量指向那个变量。 例如: 定义一个指针变量p 定义输入整型x 令p=&x p则为x的地址,而*p为x的内容 称p指向x 2、指针包含些什么 ·一级指针 (1)指针变量的定义 一般形式: 类型名 *指针变量名; 而指针声明符 在定义指针变量时被使用,说明被定义的那个变量是指针 注: 定义多个指针变量时,每一个指针变量前面都必须加上 。 3、指针怎么用 (1)指针的基本运算 ①取地址运算和间接访问运算 ·单目运算符&用于给出变量的地址。如: int p,a=3 p=&a; 当p指向a时, p和a访问同一个储存单元。即 p=a。 关于值加1 表达式 p= p+1、++ p、(*p)++ 都为p所指向的变量的值+1。 1.2 本章学习体会 2.PTA实验作业 2.1 (指针做函数返回值) 查找指定字符 2.1.1 伪代码 定义op为待查找字符 定义指针str为输入的字符串 定义index为找寻的下标 申请动态内存空间 输入字符op 缓冲换行符 自定义SearchIndex()函数 if index=-1 then 输出 not found else 输出 index

C语言博客作业05——指针

…衆ロ難τιáo~ 提交于 2019-12-06 06:35:25
0.展示PTA总分 1.本章学习总结 1.1 学习内容总结 •指针做循环变量做法 1.使指针移动,指向下一个地址单元,改变了指针原本指向的位置。 2.下标法,寻找离指针指向位置i个单位的位置,不会改变了指针原本指向的位置。 •字符指针如何表示字符串 用字符指针指向一个字符串的首地址。 •动态内存分配 void *malloc(size_t size); 函数 malloc()分配连续的内存区域,其大小不小于 size,需要强制类型转换。malloc()获得内存区域时,内存中的内容没有初值。 void*calloc(size_t n,size_t size); calloc()函数功能是动态分配n个大小为size的内存空间,需要强制类型转换。calloc()函数会将所申请的内存空间中的每个字节都初始化为0。 void * realloc(void * ptr,size_t size); realloc() 函数可以做到对动态开辟内存大小的调整(既可以往大调整, 也可以往小调整)。ptr为需要调整的内存地址,size为调整后需要的大小(字节数)。 void free(void* ptr); 申请的动态内存不再使用时,要及时释放。free()不能重复释放一块内存。在free()函数之后需要将ptr再置空 ,即ptr = NULL; 如果不将ptr置空的话

C语言博客作业05——指针

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-06 06:35:24
0.展示PTA总分 1.本章学习总结 1.1学习内容总结 a.地址和指针 在C语言中,指针被认为是计算及内存地址的代名词之一,指针变量本身就是变量,本身有一个地址,不同的是指针的 内容是地址 ,即存放的是地址。指针中有两个重要的符号,即 和&,其中 号第一次使用的时候,是用来定义一个指针变量,第一次使用后,再次使用,则表示这个指针的内容,也就是某个地址,而&号则是表示取地址的意思,在scanf()函数里,则是我们对&号的第一次接触,就是取地址的意思。 b.指针的定义 int *p;//用*表示定义一个指针变量,p就是一个指针。 int i; char *cp; p=NULL; cp=&i; Tip:指针变量被定义后,必须将指针变量和一个特定的变量进行关联后才可以使用它,不能在没有指向具体的某个变量情况下,对指针进行操作。 c.指针的基本运算 *p++ 先将*p作为表达式的值,再将指针p的值加一,运算后,p不在指向变量a,即*p=*(p+1)。 表达式 *(p++)和 *p++等价。 ++*p - ++*p的意思是将p所指的变量的值加一,和 *p= *p+1,( *p)++表示的意思是一样的。 指针的赋值运算 指针之间的赋值运算必须是同类型的 利用指针计算数组元素的个数和数组元素的存储个数 double *p,*q; double a[2]; p=&a[0]; q=p+1;

C博客作业05—指针

落爺英雄遲暮 提交于 2019-12-06 06:29:16
0.展示PTA总分(0----2) 展示关于“指针题目集”分数截图。 1.本章学习总结(2分) 1.1 学习内容总结 (1) 指针做循环变量做法 #include<stdio.h> void main() { int arr[]={6,4,3,5,8,1}; int len = sizeof(arr); for(int i=0;i<len;i++) { printf("%d\n",arr[i]);//常规遍历方式 } for(int i=0;i<len;i++) { printf("%d\n",*(arr+i));//使用arr指针遍历方式 } int *p_arr=arr; for(int i=0;i<len;i++) { printf("%d\n",*(p_arr+i));//额外使用新指针来遍历数组 printf("%d\n",*p_arr++);//额外使用新指针来遍历数组 } } (2) 字符指针如何表示字符串 C语言中没有特定的字符串类型,我们通常是将字符串放在一个字符数组中。字符数组归根结底还是一个数组,当然关于指针和数组的规则同样也适用于字符数组。举一个例子: #include <stdio.h> #include <string.h> int main(){ char str[] = "asdfghjkl"; char *pstr = str; int len =

C博客作业05--2019-指针

坚强是说给别人听的谎言 提交于 2019-12-06 06:20:57
0.展示PTA总分 1.本章学习总结 1.1 学习内容总结 整理指针这章学习主要知识点,必须包含内容有: 指针做循环变量做法 字符指针如何表示字符串 动态内存分配 指针数组及其应用 二级指针、行指针 函数返回值为指针 1.2 本章学习体会 对指针的应用大部分还局限于转为数组后使用,并不是很熟练地掌握指针的用法,对于二级指针运用scanf输入时大部分会出现错误,希望还能多讲讲指针方面的内容 计算这两周代码量,是否达到目标。 2.PTA实验作业 2.1 7-5 删除字符串中的子串 2.1.1 伪代码 用代码渲染符号```渲染伪代码。注意:伪代码不是翻译代码,必须是代码+中文文字描述。先介绍数据处理,用哪些变量。 数据处理可以用C语言符号介绍。具体参考看课件!!! 2.1.2 代码截图 2.1.3 总结本题的知识点 如下面总结,也可以观看超星视频中每个题目教师的总结做法。 1.掌握数组右移做法 for ( i = n; i > loc; i--) { data[i] = data[i-1];//右移 } 2.注意插入位置在边界情况,数组尾或数组头,需要特殊处理 3.注意插入后,数组长度增1 2.1.4 PTA提交列表及说明 截图PTA提交列表,介绍碰到问题及解决办法。如: 提交列表说明: 请按照如下要求说明提交列表,注意必须写明每个错误点,你是怎么解决的。此项没写好,本题0分 1

指针的总计

余生长醉 提交于 2019-12-06 04:52:14
这是针对于 字符串的指针数组 做出的总结 主要有三个例子 代表了不同的写法 我的编译器是Visual Studio 2019 Community 这是第一段 标准的C语言写法 #include <iostream> #include<stdlib.h> #include<stdio.h> #include<math.h> using namespace std; int main() { int i; char p[12][30] = { "January","February","March","April","May","June","July","August","September","October","November","December" }; printf("please input your number of month:"); cin >> i; char* a; a = p[12]; printf("\n"); printf("The month is:%s\n", *(p+i - 1)) return0; } 第二段 C++的写法 #include <iostream> #include<stdlib.h> #include<stdio.h> #include<math.h> using namespace std; int main() { int i

C++ 类型转换

扶醉桌前 提交于 2019-12-06 04:33:09
类型转换: 在 C++ 中, 如果两种类型相关联, 如果程序需要一种类型的运算对象时,可以用另一种关联类型的对象或值来代替。 也就是说,这两种类型可以互相转换, 即两种类型是关联的。 int ival = 3.541+ 3; 编译器会警告 运算会损失精度 。 隐式类型转换: C ++ 不会将两个数直接相加, 而是先根据类型转换规则 将对象转换成统一的类型后再求值。 隐式类型转换: 这种类型转换 是编译器 自动执行, 不需要程序员介入 。 表达式中先把 int 转换成 double , 计算结果为 double , 然后在把 double 转换成 int 赋值给变量 ival 隐式转换的情况: 下面 编译器会自动转换对象的 类型。 大多数表达式中, 比 int 小的类型首先提升成较大的整数类型 。 作为 条件 的表达式 中, 非布尔值转换成布尔值 初始化中, 如果算术运算或关系运算的对象 有 多种类型, 需要转换成同一种类型 C++ 常规类型自动类型转换规则 ( 1 )如果有一个操作数的类型是 long double ,则将另一个操作数转换为 long double 。 ( 2 )否则,如果有一个操作数的类型是 double ,则将另一个操作数转换为 double 。 ( 3 )否则,如果有一个操作数的类型是 float ,则将另一个操作数转换为 float 。 ( 4 )否则

c++指针和自由存储空间

耗尽温柔 提交于 2019-12-06 03:37:06
指针和自由存储空间 打印地址时使用16进制表示 使用指针比使用数组好的一点是数组大小在编译阶段就要确定好,而指针指向的空间大小可以在运行阶段确定好。可以使得程序更加灵活。 int * ptr;表示声明一个指针。 每声明一个指针都需要在前面加*。 指针变量不仅仅是一个指针,而且是一个指向特定类型的指针。 指针变量本身的长度是相同的。例如:char 和 double类型的指针长度相同。 c++创建指针时,只分配地址所占用的内存。而不分配指针所指向的数据的内存。数据的内存需要自己显式的分配。 在操作指针指向的数据之前,先为指针初始化一个合适的确定的地址。 c++中如果将一个int型值直接赋给指针类型(就算那个值很像地址值),编译器将显示类型不匹配的错误信息。如果要将int值赋给一个指针使用应当使用强制类型转换。 int * pt; pt = (int *) 0xB8000000; 指针在运行阶段的内存空间分配 c语言中使用malloc()分配内存。 c++中使用new分配内存。 new会找到一个长度正确的内存块,并返回该内存的地址。 int * pn = new int; new分配内存卡通常与常规变量分配的内存块不同。 常规变量存储在被称为栈的内存区域中,new分配的内存在堆中。 计算机可能因为没有足够的内存而无法满足new请求。这种情况下new将引发异常。 c+

C语言入坑指南-数组之谜

老子叫甜甜 提交于 2019-12-06 03:35:34
前言 在C语言中,数组和指针似乎总是“暧昧不清”,有时候很容易把它们混淆。本文就来理一理数组和指针之间到底有哪些异同。 数组回顾 在分析之前,我们不妨回顾一下数组的知识。数组是可以存储一个固定大小的相同类型元素的顺序集合。为了便于我们说明,假设有以下数组声明: int a[5]; char b[] = "hello"; 数组大小必须在编译期就作为一个常数确定下来。 但C99中引入了变长数组,允许数组的维度是表达式 ,但在数组分配内存时,其表达式的值可以被求出。 数组下标运算实际上都是通过指针进行的,也就是说a[4]与*(a+4)是等价的,甚至你会发现和4[a]也是一样的。 数组名一般代表了指向该数组下标为0的元素的指针,并且printf("%s\n",hello)与printf("%s\n",&hello[0])等效。 数组和指针不相等 考虑下面的声明: int c[4];//假设int占4字节 int *d; 对于上面的声明,编译器会给c预留内存空间4*4字节,并且数组名代表着指向数组第一个元素的指针。但对于d,却只为指针本身保留了内存空间。 所以此时有下面的操作: c[3]; //合法 *(c+3); //合法 *d; //不合法,d指向了内存中不确定位置 c++; //不合法,一维数组名是指针常量,常量不能被修改掉 d++; //可通过编译 另外,下面的两种情况也是不一样的:

转载-经典面试题

◇◆丶佛笑我妖孽 提交于 2019-12-06 03:22:21
3.内功题   试题1:分别给出BOOL,int,float,指针变量 与“零值”比较的 if 语句(假设变量名为var)   解答:    BOOL型变量:if(!var)    int型变量: if(var==0)    float型变量:    const float EPSINON = 0.00001;    if ((x >= - EPSINON) && (x <= EPSINON)    指针变量:  if(var==NULL)   剖析:   考查对0值判断的“内功”,BOOL型变量的0判断完全可以写成if(var==0),而int型变量也可以写成if(!var),指针变量的判断也可以写成if(!var),上述写法虽然程序都能正确运行,但是未能清晰地表达程序的意思。   一般的,如果想让if判断一个变量的“真”、“假”,应直接使用if(var)、if(!var),表明其为“逻辑”判断;如果用if判断一个数值型变量(short、int、long等),应该用if(var==0),表明是与0进行“数值”上的比较;而判断指针则适宜用if(var==NULL),这是一种很好的编程习惯。   浮点型变量并不精确,所以不可将float变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”形式。如果写成if (x == 0.0),则判为错,得0分。 ==========