c语言

C语言 ---- 指针 iOS学习-----细碎知识点总结

萝らか妹 提交于 2020-02-11 07:15:27
内存的访问形式:1、直接访问:通过变量名进行访问。2、间接访问:先找到变量存放的地址,然后根据地址去访问对应的内存空间。 指针--- // 定义一个整形指针变量,用来存储num1在内存中的地址 int *p = NULL; // 定义一个整形指针变量,指向0x0,NULL恒等于0 printf("%p\n", p); // 输出指针变量的值,使用"%p" printf("&num1 = %p\n", &num1); // 取址运算符,取得变量所在的内存地址 p = &num1; // 给整形指针变量重新赋值 printf("p = %p\n", p); printf("*p = %d\n", *p); // "*"取值运算符,取出地址里面存储的数据 // 当我们定义指针变量的时候,"*"只是起一个标识作用,告诉我们这个变量是一个指针变量。 // 当我们使用指针变量的时候,"*"表示的是从当前地址里面取出存储的数据。 // 指针的算术运算,只有加和减 int num1 = 100; int num2 = 200; int *p = &num2; printf("*p = %d\n", *p); printf("*(p + 1) = %d\n", *(p + 1)); // p + 1是指针向高位移动n个字节,n指的是指针指向的数据类型所占有的字节数(int *p移动4个字节,

C语言-指针

泄露秘密 提交于 2020-02-11 06:53:43
无指针,不自由 --1-- 为什么要使用指针 1.1 指针的基本概念 1.2 使用指针的好处 1.3 变量的存储方式 --2-- 指针变量 2.1 指针变量 2.2 定义一个指针变量 2.3 指针变量的初始化方法 2.4 使用 * 获取指针对应存储区域的内容 --3-- 存储细节 3.1 变量及指针变量 --4-- 常见的应用场景 4.1 指针常见的应用场景 --5-- 多级指针介绍 5.1 二级指针 5.2 多级指针介绍 ---------------------------- 【写在开头:】 『 生活中的指针: 没错,就是一个门牌号。 指针是 C 语言中最重要的内容之一。 为什么要使用指针? 如果你想要查找一篇资料,给你一本厚重的百科全书,而你只需要其中第3001页的内容。 那么,3001页,就是指针。如果没有这个指针...好吧,我去旁边哭会儿... 』 --1-- 为什么要使用指针 1.1 指针的基本概念 内存单元的编号也叫做地址,根据内存单元的编号或地址就就可以找到所需的内存单元。 所以通常也把这个地址称为指针 1.2 使用指针的好处 1 )为函数提供修改调用变量的灵活手段 2 )让函数有多个返回值 3 )可以改善程序的效率   在数据传递时,如果数据块较大(比如数据缓冲区或比较大的结构),这时就可以使用指针传递地址而不是实际数据,既提高传输速度,又节省了大量的内存 4

PTA|《C语言程序设计(第3版)》练习7-11 字符串逆序 (15分)

一世执手 提交于 2020-02-11 06:36:32
题目 输入一个字符串,对该字符串进行逆序,输出逆序后的字符串。 输入格式: 输入在一行中给出一个不超过80个字符长度的、以回车结束的非空字符串。 输出格式: 在一行中输出逆序后的字符串。 输入样例: Hello World ! 输出样例: ! dlroW olleH 参考解答 # include <stdio.h> int main ( ) { int i = 0 , k ; char tmp , str [ 80 ] ; while ( ( str [ i ] = getchar ( ) ) != '\n' ) i ++ ; str [ i -- ] = '\0' ; for ( k = 0 ; k <= i / 2 ; k ++ ) { tmp = str [ k ] ; str [ k ] = str [ i - k ] ; str [ i - k ] = tmp ; } puts ( str ) ; return 0 ; } 来源: CSDN 作者: 烫烫烫奥特曼 链接: https://blog.csdn.net/weixin_44421292/article/details/104226948

c语言基础2指针

冷暖自知 提交于 2020-02-11 06:07:42
--------- 指针的详解 --------- 指针的定是 int * a; b = 1; a=&b 可以看出来,a这个指针变量存的是b的地址。 可以变形为int *a=&b *d 表示访问位置100,并取得里面的值。 一个常见的错误,int *a ;*a= 12;但是a究竟指向哪里呢,由于我们没有对a进行初始化,所以我们没有办法预测12这个值究竟存在哪里。如果变量是静态的 它会被初始化为0,如果是自动的它根本不会被初始化,无论哪种情况,声明一个 指向整型的指针都不会创建用于存储整型的内存空间。 所以程序执行这个赋值操作,将会发生什么呢?如果你运气好,a的赋值是个非法地址,这样赋值语句将会出错 标准定义了空指针,NULL指针,它作为一种变量特殊的指针变量,表示不指向任何东西,要使一个指针变量变为NULL,你可以给他附一个零值。为了测试一个指针是否为空 可以将他与零值进行比较,之所以选择零值是因为一种源代码约定,就机器语言而言,NULL指针的实际值可能与此不同,在这种情况下,编译器负责将零值和 内部值之间进行转换。 NULL指针的概念非常有用,因为他给了你一种方法,表示某个特定的指针目前并未指向任何东西。例如一个用于在某个数组中查找某个特定值的函数可能返回一个 指向查找到得数组元素的指针。如果该数组不包含指定条件的值,函数就返回一个NULL指针

C语言------指针

好久不见. 提交于 2020-02-11 05:28:46
1. 每个字节包含8个位,为了存储更大的值,我们把两个或更多个字节合在一起作为一个更大的内存单位。每个字一般由2个或4个字节组成。需要注意的是,尽管一个字包含了4(或2)个字节,它仍然只有一       个地址。 2. 指针的初始化是用&操作符来完成的,它用于产生操作数的内存地址。 3. 一个变量的值就是分配给这个变量的内存位置所存储的数值,即便是指针变量也不例外。 4. 通过一个指针访问它所指向的地址的过程称为间接访问(indirection)或解引用指针(dereferencing the pointer)这个用于执行间接访问的操作符是单目操作符 “*”。 5. 对指针进行解引用操作可以获得它所指向的值。从定义上看,NULL指针并未指向任何东西。因此,对一个NULL指针进行解引用操作是非法的,在对指针进行解引用操作前,你首先必须确保它非NULL指针 6. 对所有的指针变量进行显式的初始化是种好做法,如果你已经知道指针将被初始化为什么地址,就把它初始化为该地址,否则就把它初始化为NULL,风格良好的程序会在指针解引用之前对它进行检查,这种初始化策略可以节省大量调试时间。 7. 变量(除了const变量外)都是左值。指针变量可以作为左值,并不是因为它们是指针,而是因为它们是变量。 8. 指向指针的指针。例如:*b = &a; c = &b; 那么**c就是指向指针的指针。  

C语言——什么是指针?

谁都会走 提交于 2020-02-11 05:21:22
去年学C语言课时,初步了解了指针的概念,能看懂一些简单的含有指针的程序,但事实上对于指针并没有真正的弄明白它的使用,这点我在半年后的数据结构课程上才深刻的体会到和别人的差距。更加可怕的是,对于当时所得的一知半解,现在已经忘的八九不离十了,所以决定进行C语言核心部分的重修,巩固自己的基础。 1.什么是指针? 定义一个变量,系统会为它分配内存单元,内存区的每一个字节有一个编号,即“地址”。 我们可以通过地址找到所需的变量单元,即:地址指向该变量单元。而这个地址便被形象化的称为“指针”。即: 一个变量的地址称为该变量的指针。 2.什么是指针变量? 定义一个变量,专门用它来存放另一个变量的地址,这个变量被称为指针变量。指针变量的值是地址(指针)。 3.指针变量的定义。 int *p;//类型名 * 指针变量名; ***注意:指针变量p前面的 *,指针运算符,表示的是“指向” ,表示该变量的类型为指针型变量。在定义指针变量时必须指定基类型。 int a,b; int *p1,*p2;//定义两个指向int的指针变量p1,p2 p1=&a;//a的地址赋给指针变量p1 p2=&b;//b的地址赋给指针变量p2 ***注意: &,取地址运算符,&a是变量a的地址 。 4.指针变量的引用。 *p1=100;//将100赋给p指向的变量,即变量a=100 printf("%d",*p1);/

IOS笔记-C语言中的指针与数组

蹲街弑〆低调 提交于 2020-02-11 03:53:29
1、指针与数组 1)指针与一维数组 i.数组指针(指向数组元素的指针) 类型 *指针变量名; 指针定义完成后要初始化(不想让指向任何内容,=0,=NULL) int a[10]; int *p = &a[0]; // &a[0] == a int *p1 = a; ii.用数组的指针访问数组元素 偏移:指针变量的偏移 p1 = p1+1; //向下偏移1个一个数组元素 p1++; //p1中存放的还是地址 .... 如果用指针访问第i个元素 p1+i 取出pi指向的元素的值:*(p1+i); == a[i]元素的值 具体地址值计算:p1+sizeof(数组的类型) 指针数组(数组中的每个元素都是指针) 数组中的每一个元素还是一个指针 int a[3][3]={11,2,3,4,5,6,7,8,9}; a[0] //行地址 a[1] a[2] //pa就是一个指针数组 int *pa[3]={a[0],a[1],a[2]}; 2)指针与二维数组 数组指针(指向数组元素的指针) 特定的格式: int (*p3)[3]; //定义一个指向二维数组的指针,而且二维数组的第二维长度要是3 int b[3][3]; p3 = b; int b1[2][3]; p3 = b1; int b2[2][2]; p3 = b2; //编译器给警告 用指针对二维数组的遍历 int a[3][3] ={1

C语言:指针的几种形式

╄→尐↘猪︶ㄣ 提交于 2020-02-11 02:57:58
字符串的两种形式: 1、字符数组 char name[32] = “zhangsan”; //只能在初始化时这样做 strcpy(name,”lisi”); //整体赋值只能通过strcpy name = “lisi”; //error,将一个常量字符串的地址(“lisi")赋值给常量指针(char* const name) 2、字符指针 char *name = “zhangsan”; //指针变量name指向了常量字符串的开始地址 char* name; //在使用野指针(未初始化的指针) scanf(“%s”,name); //error, strcpy(name,”lisi”); //error,如果name指向了常量的字符串,会崩掉。 如果name没有初始化,程序有可能会崩掉,也有可能会覆盖内存中的数据。 name = “lisi”; //ok,重新修改指针变量name的指向,即指向一个新的字符串地址。 1、const int* p和int const* p:两者意义是相同的。指向的内容是只读数据,不可以q改变;但是指向的地址可以改变。 2、int* const p:必须先对指针初始化,而且指向的地址是只读的,不可以再被改变;但是指向的内容可以改变。 3、const int* const p:既不可以改变指针指向的地址,也不可以改变指针指向的内容。 来源: https:/

C语言------结构体和共同体

给你一囗甜甜゛ 提交于 2020-02-11 01:07:37
1.结构体是一种构造类型,它是由若干成员组成的,其中每个成员可以是一个基本数据类型或者是一个构造类型。声明结构体时使用关键字struct。 2..声明一个结构体表示的是创建一个新的类型名,要用新的类名再定义变量,定义方式有三种:   A.声明结构体,然后再定义变量。     struct Product     {成员列表};     struct Product product1;     struct Product product2;   B.在声明结构类型时,同时定义变量。     struct Product     {       char cName[10];       char cShape[20];     }product1, product2;     PS:注意变量的名称要放在最后的分号前面;定义的变量不是只能有一个,可以定义多个变量    C.直接定义结构体类型变量。     struct     {       成员列表     }变量名列表; 3.在引用结构体的成员时,可以在结构的变量名的后面加上成员运算符"."和成员的名字,例如:product1.cName 4结构体类型与其他基本类型一样,可以在定义结构体变量时指定初始值。例如:   struct Student   {     char cName[20];     char cSex;    

C语言寒假大作战03

99封情书 提交于 2020-02-10 22:35:08
这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/CST2019-4 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-4/homework/10269 这个作业的目标 学会如何使用随机数 作业正文 https://i-beta.cnblogs.com/posts/edit 其他参考文献 https://www.runoob.com/cprogramming/c-function-rand.html 1设计思路和遇到的问题 设计思路:在我看到题目的时候就想到本次作业实在上次作业的基础上深入的, 其中只是多了题目,结合以往作业可以知道,这多出来的部分会在作业地下有参考资料; 遇到的问题:如何设立随机数和变换运算符号; 2.程序结果截图 3.程序代码 #include <stdio.h> #include <stdlib.h> #include <time.h> void menu(); void help(); void error(); void one(); void two(); void three(); int main() { int i; printf("=======口算生成器======\n欢迎使用口算生成器 :)\n\n\n"); help(); while