c语言指针

C语言--字符数组

蹲街弑〆低调 提交于 2020-01-22 02:45:15
一、PTA实验作业 题目1:7-1 字符串转换成十进制整数 1. 本题PTA提交列表 2. 设计思路 主要思路流程: 筛选出十六进制字符和负号: 遍历数组ch1并计算十进制整数number: 判断十进制整数number的符号并输出: 3.代码截图 4.本题调试过程碰到问题及PTA提交列表情况说明。 问题1:不知道怎么把字母字符转化成整数计算 解决办法:网上百度。例:n=B-‘A’+10; 问题2:答案部分正确,不知道如何处理负号,输出的数没有正负之分 解决办法:在设计一遍算法,理一遍思路。最后重新把思路整理为定义一个数组存放筛选出来的字符串,如果这个数组的第一个字符是负号,则这个数是负数。 题目2:找最长的字符串 1. 本题PTA提交列表 2. 设计思路 3.代码截图 4.本题调试过程碰到问题及PTA提交列表情况说明。 问题: 错因: 题目3:指定位置输出字符串 1. 本题PTA提交列表 2. 设计思路 3.代码截图 4.本题调试过程碰到问题及PTA提交列表情况说明。 一开始写的时候没有注意ch1和ch2也是要输出的。 二、截图本周题目集的PTA最后排名。(2分) PTA排名 三、同学代码结对互评(1分) 1.互评同学名称 2.我的代码、互评同学代码截图(此处截图核心代码就好,不一定截图全部代码,图上指明是谁的代码。) 3.我和同学代码不同在哪里?有哪些各自优势

指针变量后面的中括号数组表示什么意思?

こ雲淡風輕ζ 提交于 2020-01-22 01:25:28
在看etherCAT_slave_c28x_hal.c代码块的时候遇到如下写法: /******************************************************************************************/ 解析: 1、其中:对于表达式pEsc[((offset<<1))],C语言处理成运算符,pEsc[((offset<<1))] 等价于 *(pEsc+(offset<<1)), 因为:在C语言里,指针和数组关系密切。*pEsc, 一旦有指向地址后,就可以看成 一维数组pEsc[], 哪种形式便于阅读理解,就可以用哪种形式,所以pEsc[((offset<<1))] 等价于 *(pEsc+(offset<<1))。 2、在编译器看来数组名与指针是同一概念,比如这里的st其实就是*st,在编译器编译时,自动会把所有的[]处理为*()(声明除外)。比如st[5]编译时就变成了*(st+5),ps[i]就是*(ps+i)。 3、malloc叫动态内存分配,是在程序运行时分配的内存,内存区域为动态如;数组是在编译时分配,所以定义时需要给定明确的长度,分配的内存在静态区。至于你说的指针用下标取值,其实是因为数组用下标取值其实是先转化为指针的——a[i]先转化为*(a+i)。 4、至于(volatile uint16_t *

C基础第28课--指针和数组分析(上)

南楼画角 提交于 2020-01-22 00:51:34
学习自狄泰软件学院唐佐林老师C语言课程,文章中图片取自老师的PPT,仅用于个人笔记。 实验1 #include <stdio.h> int main() { int a[5] = {0}; int* p = NULL; printf("a = 0x%X\n", (unsigned int)(a)); printf("a + 1 = 0x%X\n", (unsigned int)(a + 1)); printf("p = 0x%X\n", (unsigned int)(p)); printf("p + 1 = 0x%X\n", (unsigned int)(p + 1)); return 0; } mhr@ubuntu:~/work/C$ mhr@ubuntu:~/work/C$ ./a.out a = 0xCD11B2D0 a + 1 = 0xCD11B2D4 p = 0x0 p + 1 = 0x4 mhr@ubuntu:~/work/C$ mhr@ubuntu:~/work/C$ 实验2 #include <stdio.h> int main() { char s1[] = {'H', 'e', 'l', 'l', 'o'}; int i = 0; char s2[] = {'W', 'o', 'r', 'l', 'd'}; char* p0 = s1; char* p1 =

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’为字符串结束的标志

golang之不安全编程

无人久伴 提交于 2020-01-19 00:38:16
楔子 不安全编程?用golang以来也没发现有啥不安全的啊,而且golang有垃圾回收,也不需要我们来管理内存。当听到不安全编程这几个字,唯一能想到的也就是指针了,只有指针才可能导致不安全问题。我们知道golang中是有指针的,但是golang的指针并不能像C语言中的指针一样,可以进行运算,所以golang中的指针既提供了指针的便利性,又保证了安全。但是在golang中,可以通过一个叫做 unsafe 的包让指针突破限制,从而进行运算,一旦用不好会导致很严重的问题,但是用好了在某些场景下能够带来很大的便利,所以我们说这是不安全编程。但即便如此,我们还是可以使用的,而且golang的内部也在大量的使用unsafe这个包。 golang中的指针 尽管golang的指针没有C的指针那么强大,但是能够获取一个变量的地址,并且能通过地址来改变存储的值,我个人认为已经足够了。 package main import "fmt" func pass_by_value(num int){ num = 3 } func pass_by_pointer(num *int){ *num = 3 num = nil } func main() { num := 1 pass_by_value(num) fmt.Println("传递值:", num) //传递值: 1 pass_by_pointer(

数据结构-链表的基本操作

我的梦境 提交于 2020-01-19 00:27:40
数据结构-链表(C语言) 四种常见的链表结构 结点包括两个域,存储数据信息的是数据域,存储直接后继或前驱存储位置的域的是指针域。指针域中存储的信息称为指针。单链表的指针域只有一个Next指向直接后继而双向链表的指针域有两个Next和Prev分别指向直接后继和直接前驱结点。 使用链表的好处:便于插入和删除,时间复杂度都为O(1)。 下面是关于单链表的创建,插入,删除,查询和遍历的代码 结点的定义 typedef struct LNode { int data ; struct LNode * next ; } Node , * LinkList ; 其中data为数据域,next为指针域 链表的创建 LinkList create_list ( ) { LinkList head , p , q ; int i = 0 ; head = NULL ; p = ( LinkList ) malloc ( sizeof ( Node ) ) ; scanf ( "%d" , & p -> data ) ; while ( p -> data ) { if ( i == 0 ) { head = p ; p -> next = NULL ; q = p ; i ++ ; } else { p -> next = NULL ; q -> next = p ; q = p ; } p = (

C语言函数返回指针方法

那年仲夏 提交于 2020-01-19 00:10:27
什么是指针? 指针 是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。 指针变量声明 type *var-name; type 是指针的基类型,它必须是一个有效的 C 数据类型, var-name 是指针变量的名称。用来声明指针的星号 * 与乘法中使用的星号是相同的。 空指针 赋为 NULL 值的指针被称为 空 指针,NULL 指针是一个定义在标准库中的值为零的常量。 数组指针: 它是一个指针,它指向一个数组。指向数组的指针,本质是指针。 int (*p)[3] 因为()优先级高,首先说明p是一个指针,指向一个int型的一维数组, 数组有3个元素,每个元素是一个int型整数 简单来说,就是int (*p)[3]是指一个指向数组的指针,它其实还是一个指针,只不过是指向数组而已 指针数组: 它是一个数组,数组的元素都是指针。存放指针的数组,本质是数组。 int *p[3] [ ] 优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,指针数组本身就是个数组,只不过这个数组里存放的不是int 不是char,而是一个指针类型( int*,char* ),也就是就是地址 。 函数返回指针 C语言允许函数的返回值是一个 指针 (地址),我们将这样的函数称为指针函数。 用指针作为函数返回值时需要注意的一点是,函数运行结束后会销毁在它内部定义的所有局部数据,包括局部变量