指针

黑马程序员-----结构体数组

别等时光非礼了梦想. 提交于 2020-02-11 07:15:00
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! ----- 第一讲 结构体数组 一、结构体数组的概念 数组的元素也可以是结构类型的。因此可以构成结构型数组。结构数组的每一个元素都是具有相同结构类型的下表结构变量。在实际应用中,经常用结构数组来表示具有相同数据结构的一个群体。如一个班的学生档案,一个车间职工的工资表等。 二、结构数组定义 定义格式: struct 结构名{ 成员表列 }数组名[数组长度]; 例如:定义一个长度为5的数组,其中每一个元素都是stu结构类型。 struct stu{ int num; char *name; char sex; float score; }boy[5]; 定义了一个结构数组boy,共有5个元素,boy[0]~boy[4].每个数组元素都具有struct stu的结构形式。 1 /* 2 结构体数组: 3 4 用来存放大量的结构体相同的结构体变量。 5 6 结构体数组定义: 7 8 结构体数组定义的第一种方式: 9 1.定义结构体的同时,定义数组 10 struct Student{ 11 int age; 12 char *name; 13 int sno; 14 float score; 15

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

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和指针小结(C/C++程序设计)

烂漫一生 提交于 2020-02-11 06:07:24
C和指针 相关基础知识:内存的分配(谭浩强版) 1、整型变量的地址与浮点型/字符型变量的地址区别?(整型变量/浮点型变量的区别是什么) 2、int *p,指向整型数据的指针变量。 3、通过指针变量访问整型变量。 4、*p :指针变量p指向的存储单元(变量) 5、p = &a——>> *p = *&a 6、用指针作函数参数 7、 调用函数中,由于虚实结合是采用单向的“值传递”方式,只能从实参向形参传数据,形参值的改变无法回传给实参。 8、引用一个数组元素可以用(1)下标法(2)指针法(占内存小,运行速度快) 9、指针提高效率在那些方面?(内存,运行时间??) 10、如果指针变量p已指向数组中的一个元素,则p+1指向同一数组中的下一个元素。 11、用指针变量作函数形参接受数组地址。 数组指针和指针数组的区别 1 #include"iostream" 2 using namespace std; 3 int main() 4 { 5 void sort(int *p,int n); 6 int a[5],i; 7 cout<<"input array:"<<endl; 8 for(i=0;i<5;i++) 9 cin>>a[i]; 10 cout<<endl; 11 sort(a,5); 12 cout<<" the sorted array:"<<endl; 13 for(i=0;i

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就是指向指针的指针。  

指针续

天涯浪子 提交于 2020-02-11 05:21:35
什么是指针 指针是一种数据类型(代表内存地址的整数),使用它定义的变量叫指针变量 为什么使用指针、什么情况下使用指针 1、函数之间无法通过传参共享变量。函数的形参变量属于被调用于者,实参属于调用者,函数之间的名字空间相互独立是可以重名的,函数之间的数据传递都是值传递(赋值、内存拷贝)。 2、使用指针可以优化函数之间传参的效率。 3、堆内存无法与标识符建立联系,只能配合指针使用。 如何使用指针 定义:类型 * 变量名p; 1、指针变量与普通变量使用方法有很大区别,一般以p结尾,与普通变量区分开。 2、* 表示此变量是指针变量,一个* 只能定义出一个指针变量,不能连续定义。 int* p1,p2,p3; (p1是指针,p2,p3是int变量) int *p1,*p2,*p3; (三个指针变量) 3、类型表示的是存储是什么类型变量的地址,它决定当通过地址访问这块内存时访问的字节数。 4、指针变量的默认值也是不确定,一般初始化为NULL(空指针)。 赋值:指针变量 = 地址 1、栈地址赋值: int num = 0; int * p = NULL; p = & num; 2、堆地址赋值: int * p = NULL; p = malloc(4); 解引用(根据地址访问内存):*指针变量名 <=> 变量 1、根据变量中存储的内存编号去访问内存中的数据,访问多少个字节要根据指针变量的类型。

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);/

指针的用法

我的未来我决定 提交于 2020-02-11 04:40:49
大家都应该知道, 指针是个什么玩意儿, 它就是用来存另一个变量的地址的。这玩意儿在程序中容易引起不易察觉的错误, 而且会给调试带来莫大的困难。 尽管如此,它现在依然存在着, 这就从另一方面说明了, 它的功能爆表。 在实现链式存储, 图, 树, 森林时, 大都要用指针。 不仅如此, 在访问多维数组,函数参数传递时, 也多用指针。下面给出指针的一些常用的用法代码。      /*指针的声明及一般用法*/ /*________________________________________________________________*/ //声明: int a; int *p=&a; int a; int *p; p=&a; #include<stdio.h> int main() { int a, b; int *ipointer1, *ipointer2; scanf("%d%d", &a, &b); ipointer1 = &a; ipointer2 = &b; printf("The number is:%d %d\n", *ipointer1, *pointer2); } #include<stdio.h> int main() { int *p, q; p=&q; scanf("%d", p);//另类写法。 printf("%d\n", q); return 0; }

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:58:10
1. 继承方式 public   父类的访问级别不变 protected 父类的public成员在派生类编程protected,其余的不变 private 父类的所有成员变成private #include <iostream> using namespace std; class base { public: void printa() { cout <<"base"<< endl; } protected: void printhello() { cout <<"helo"<< endl; } private: void printnohello() { cout <<"no hello"<< endl; } }; class derived : public base { public: void printb() { printhello(); } // void printc() { printnohello(); } //printnohello是父类的私有函数,不可访问 }; int main() { base a; a.printa(); //a.printhello(); //printhello是类derived的protected函数,不可访问。 } 2. sizeof 和 strlen 的区别 sizeof 是一个操作符,strlen 是库函数。