C和指针小结

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<5;i++)
14      cout<<a[i]<<" ";
15      cout<<endl;
16      return 0;
17  }
18
19  void sort(int *p,int n)
20  {
21      int i,j,k,temp;
22      for(i=0;i<n-1;i++)
23      {
24          k=i;
25          for(j=i+1;j<n;j++)
26          if(*(p+j)<*(p+k)) k=j;
27          temp=*(p+k);
28          *(p+k)=*(p+i);
29          *(p+i)=temp;
30      }
31  }

12、一个int占多少个字节?原文链接

13、实参和形参的结合有一下4种形式:

实参 形参
数组名 数组名
数组名 指针变量
指针变量 数组名
指针变量 指针变量

14、实参数组名a代表一个固定的地址,或者说是指针常量,因此其值不可改变;形参数组名是指针变量,可以改变。//  a++ //语法错误,不可改变

15、字符串与指针。字符串数组/字符串变量/字符指针 存放字符串。

 1 //test_3 指针存放字符串
 2  #include<iostream>
 3  using namespace std;
 4 // #include<string> //字符串变量
 5  int main()
 6  {
 7      char str1[]="I Love C++",str2[20],*p1,*p2;
 8      p1=str1;
 9      p2=str2;
10     for(;*p1!=‘\0‘;p1++,p2++)
11     *p2=*p1;
12     *p2=‘\0‘;
13     p1=str1;
14     p2=str2;
15     cout<<"str1 is "<<p1<<endl;
16     cout<<"str2 is "<<p2<<endl;
17     return 0;
18   } 

16、函数与指针。函数的入口地址就称为函数的指针。

  1)、用函数指针调用函数

    函数类型 (*变量名)(函数形参表)

 1 #include<iostream>
 2 using namespace std;
 3
 4  int main()
 5  {
 6      int max(int x, int y);
 7      int (*p)(int,int);
 8      int a,b,m;
 9      p=max;
10      cin>>a>>b;
11      m=p(a,b);
12
13     cout<<"max is "<< m<<endl;
14     return 0;
15   }
16
17   int max(int x,int y)
18   {
19       int z;
20       if (x<y)
21       z=y;
22       else
23       z=x;
24       return(z);
25   }

  2)、用指向函数的指针作函数参数。

  3)、返回指针值的函数:指针函数。

    类型名 *函数名(参数列表);int *a( int x,int y);

17、

  1)、指向常量的指针(不允许通过指针变量修改它指向的对象的值)

     const 类型名 *指针变量名

   2)、常指针(指定指针变量的值为常量,即指针变量的指向不可改变)

      类型名 *const 指针变量名

        Tips:必须在定义是初始化,指定其指向。

           指针变量的指向不可改变,但指针变量的指向变量的值可以改变。*p2=12;//合法

           注意(const和*的位置)。const在*后面,请与定义指向常变量的指针变量的形式比较。

   3)、指向常量的常指针(指针变量指向一个固定的对象,该对象的值不能改变)。

     const 基本类型名 *const 指针变量名

18)、void指针类型

时间: 2024-10-16 17:39:36

C和指针小结的相关文章

黑马程序员学习笔记-C指针小结

黑马程序员学习笔记-C指针 1. 指针简介: 指针是C语言中非常重要的数据类型,是C语言的精华 2. 指针变量定义: 格式:类名标识符 *指针变量名; 指针变量只能存储地址 指针就一个作用:能够根据一个地址值,访问对应的存储空间 指针变量p前面的int:指针变量只能指向int类型的数据 3.实例: 4. 注意点: 指针变量只能存储地址.指针变量未经初始化,不要拿来间接访问其他存储空间.指针变量的初始化可以int *p = &a;也可以拆分成两句:int *p; p =&a;.定义变量时的*

C指针小结2

在上一篇对指针的小结中只是片面的说明了指针的概况,与基本含义,其实说到指针必然要提及数组,数组与指针有着密不可分的联系.但是切记数组和指针根本是两个东西,指针不能和数组画等号. 数组: 例如 int a[10];这声明的是一个由10个整形组成的数组,其中包含10个整形元素,同时数组名的值是一个指针常量,也就是数组第一个元素的地址.如果前面声明的是其他类型那么,数组名的类型就是"指向其他类型的常量指针".之前说过数组与指针不是一个东西,那么他们的区别在哪里? 1.数组具有确定数量的元素,

指针小结

1.指针与左值.右值 在C++中有左值与右值之分,弄清楚它们的关系和区别很重要.当一个对象用作左值时用的是对象的身份(即其内存),当一个对象用作右值时用的是对象的值(即内容). 例如: int a = 5,b = 6; a=b;   //a是左值,用的是a在内存中的位置 //b是右值,用的是b的值,即6 取地址符作用于一个对象时取这个对象的地址,返回一个指向此对象的指针.所以取地址符作用一个左值对象,返回值是指针,而指针是一个右值.解引用运算符求值结果是左值. 例如: int *p: p的类型为

C指针小结

在C语言的学习中,指针,数组,函数等被我们所熟知,但是真正碰到或者真正用到时,难免有些混淆.下面重点聊一下指针: 指针:通俗讲是内存单元的地址,是个常量.换句话说是地址. 指针变量:在C语言中允许一个变量来存放指针,这个变量就是指针变量.是个变量.换句话说是取值为地址的变量.(但是在平时大家统称指针变量为指针,这个要分清) 指针变量的类型说明: 类型说明符* 变量名:初始化的两种方法:int* p = &a或者int* p;p = &a;( 指针定义时要初始化,这是一个好习惯) 指针变量的

C指针小结1

我认为C语言的核心就是指针和对内存的操作,而操作内存就是由指针实现的,所以说指针真的非常非常重要,在后边的数据结构的学习中更要用指针,如果你立志要走C系统的开发这条路,那么你就应当精通指针的各种应用.下面写一点博主在学习指针时的一点小心得,小体会(仅仅一家之言). 在刚学习指针时是真的一头雾水,感觉好难理解啊,这到底是个什么鬼?为何如此之难?不过在经过很长时间的纠结后博主还是有所体会. 指针: 指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存

C++的RAII和智能指针小结

RAII:资源分配即初始化,利用构造函数和析构函数定义一个类来完成对资源的分配和释放 智能指针主要用来防止内存泄漏,我们来举个栗子,看看为什么会有智能指针这个东东 例1: 对于上面这段程序,由于抛出异常的时候影响了代码的执行流,所以要在异常捕获之前将p提前释放(详见 我的博客:C++的异常浅析),虽然可以通过再次抛出以异常解决这个问题,但是在代码美观方面不够完 美,更重要的是如果在代码量非常大,而且在多处有动态开辟出来的空间的时候,仅仅通过再次抛出异常已 经远远不够解决这个问题了,会使得工作量大

学习点滴记录之三指针小结

1.简单来的说,指针也是一种变量,占有内存空间,并且指向内存地址. 2.声明时,*表示声明的变量为指针:操作时,*表示对指针指向内存空间的值进行操作. *p相当于通过地址(p变量的值)找到内存,并对该内存进行操作. *p放在“=”左边,表示对内存进行赋值运算:放在右边,则是读取该内存中的值. 3.指针变量和它指向的内存块是两个不同的概念 //含义1 给p赋值p=0x1111; 只会改变指针变量值,不会改变所指的内容:p = p +1; //p++ //含义2 给*p赋值*p='a'; 不会改变指

C指针小结3

现在总结指针的更高一级的用法,其中指向函数的指针在我的博文中已经单独介绍过了,将会补充介绍几点,现在介绍别的指针的用法. 首先介绍几个陷阱: int f()[]; int f[](); 这两个声明都是非法的,如果有人问这两个声明什么意思,我们应当不加思索的说出这是错误地声明,博主就曾经苦苦思考过这两个声明的意思,现在想想都觉得可笑. 现在对于指向函数的指针补充几点: 例如: int (*pf)(int)=&f; 现在创建了一个函数指针,并把它初始化为指向函数f,其实初始化表达式的&操作符是

指针和数组(上)

1)指针基础: 既然程序中的变量只是一段存储空间的别名,那么是不是必须通过这个别名才能使用这段存储空间, int main() { int i=5; int *p=&i; printf("%d,%08x\n",i,p); *p=10; printf("%d,%08x\n",i,p); return 0; } 指针本质: 指针在本质上也是一变量, 指针需要要占用一定的内存空间, 指针用于保存内存地址的值, *号的意义: 在指针声明时,*号表示所声明的变量为指针