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、用指针变量作函数形参接受数组地址。数组指针和指针数组的区别

 #include"iostream"
using namespace std;
int main()
{
void sort(int *p,int n);
int a[],i;
cout<<"input array:"<<endl;
for(i=;i<;i++)
cin>>a[i];
cout<<endl;
sort(a,);
cout<<" the sorted array:"<<endl;
for(i=;i<;i++)
cout<<a[i]<<" ";
cout<<endl;
return ;
} void sort(int *p,int n)
{
int i,j,k,temp;
for(i=;i<n-;i++)
{
k=i;
for(j=i+;j<n;j++)
if(*(p+j)<*(p+k)) k=j;
temp=*(p+k);
*(p+k)=*(p+i);
*(p+i)=temp;
}
}

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

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

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

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

      //  a++ //语法错误,不可改变

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

 //test_3 指针存放字符串
#include<iostream>
using namespace std;
// #include<string> //字符串变量
int main()
{
char str1[]="I Love C++",str2[],*p1,*p2;
p1=str1;
p2=str2;
for(;*p1!='\0';p1++,p2++)
*p2=*p1;
*p2='\0';
p1=str1;
p2=str2;
cout<<"str1 is "<<p1<<endl;
cout<<"str2 is "<<p2<<endl;
return ;
}

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

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

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

 #include<iostream>
using namespace std; int main()
{
int max(int x, int y);
int (*p)(int,int);
int a,b,m;
p=max;
cin>>a>>b;
m=p(a,b); cout<<"max is "<< m<<endl;
return ;
} int max(int x,int y)
{
int z;
if (x<y)
z=y;
else
z=x;
return(z);
}

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

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

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

17、

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

     const 类型名 *指针变量名

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

      类型名 *const 指针变量名

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

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

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

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

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

18、void指针类型

19、引用与指针 

    为什么用引用?

      主要是把它当做函数参数,以扩充函数传递数据的功能。

        (1)将变量名作为实参和形参。值传递是单向的,实参传给形参,形参改变不影响实参的值。

            因为在调用函数时,形参和实参不在同一存储单元。

        (2)使用指针变量做形参,实现两个变量的值互换。

        (3)以引用作为形参,在虚实结合时建立变量的引用,使形参名作为实参的引用,即形参成为实参的引用。

 using namespace std;
int main()
{
// const int a=100,b=10;
void swap(int *p1,int *p2);
// void swap(int &p1,int &p2);
int a=,b=;
int *pointer_1,*pointer_2,*p;
pointer_1=&a;
pointer_2=&b;
cout<<a<<" "<<b<<endl;
swap(pointer_1,pointer_2);
// swap(*pointer_1,*pointer_2);
//*pointer_1=20;
// if (a<b)
// {
// p=pointer_2;
// pointer_2=pointer_1;
// pointer_1=p;
// }
cout<<a<<" "<<b<<endl;
cout<<*pointer_1<<" "<<*pointer_2<<endl;
return ;
}
void swap(int *p1,int *p2)
// void swap(int &p1,int &p2)
{
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
//
// int temp;
// temp=p1;
// p1=p2;
// p2=temp;
}

C和指针小结(C/C++程序设计)的更多相关文章

  1. C语言 指针小结

    指针 -->指针变量 类型名 *变量名 int *point1; char *point2; 注意:*p可以直接使用,它代表指针p指向的变量,*p可以当做被指向的变量使用!~~~~ 一个变量的地 ...

  2. this指针------新标准c++程序设计

    背景:   c++是在c语言的基础上发展而来的,第一个c++的编译器实际上是将c++程序翻译成c语言程序,然后再用c语言编译器进行编译.c语言没有类的概念,只有结构,函数都是全局函数,没有成员函数.翻 ...

  3. C51指针小结

    一. 指针变量的定义 指针变量定义与一般变量的定义类似,其形式如下: 数据类型 [存储器类型1] * [存储器类型2] 标识符: [存储器类型1] 表示被定义为基于存储器的指针.无此选项时,被定义为一 ...

  4. pionter指针小结

    第七章.指针和函数的关系 可以把一个指针声明成为一个指向函数的指针. intfun1(char*,int); int(*pfun1)(char*,int); pfun1=fun1; .... .... ...

  5. C语言指针-小结

    1) 指针变量可以进行加减运算,但是指针变量的加减运算并不是加上或减去一个数,而是跟指针指向的数据类型有关,数据类型在系统中占了多少个字节,指针+1后就向后移动了多少个字节. 2) int *poin ...

  6. Keil C51中函数指针的使用

    函数指针在C语言中应用较为灵活.在单片机系统中,嵌入式操作系统.文件系统和网络协议栈等一些较为复杂的应用都大量地使用了函数指针.Keil公司推出的C51编译器是事实上80C51 C编程的工业标准,它针 ...

  7. C++11中智能指针的原理、使用、实现

    目录 理解智能指针的原理 智能指针的使用 智能指针的设计和实现 1.智能指针的作用 C++程序设计中使用堆内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理.程序员自己管理堆内存可以提高了程序 ...

  8. c++ 常量指针

    一.指向常量的指针 定义形式: const 类型 * 指针名; 不能通过指针修改地址里的值. int i=0x123; const int *p=&i; *p=; //错误 //前置const ...

  9. C学习笔记-指针

    指针的概念 指针也是一个变量,指针变量的值是另一个变量的地址 换句话说就是,指针存放的是一个内存地址,该地址指向另一块内存空间 指针变量的定义 指向一个变量的变量 int *p = NULL; p = ...

随机推荐

  1. android -chrome 调试

    在chrome上 输入 chrome://inspect/ 连接手机,配置 监听8000,和8080端口 cordova默认是8000端口 如果出现白屏:原因:google在首次加载时,要进行服务器连 ...

  2. ABAP-年月期间搜索帮助

    selection-screen begin of block block1 with frame title text-. parameters:p_mon1 like s031-spmon, p_ ...

  3. libUpnp缓冲区溢出、拒绝服务等漏洞分析

    该漏洞存在于UPnP™设备的便携式SDK中,也叫做 libupnp.这个库是用来实现媒体播放(DLAN)或者NAT地址转换(UPnP IGD).智能手机上的应用程序可用这些功能播放媒体文件或者利用用户 ...

  4. memory management

    1. 高端内存: 内存的物理寻址范围比虚拟寻址范围大的多,有一些内存页不能永久的映射到内核地址空间. 2. 高端内存和低端内存是内核对内存物理页的划分. 参考:http://ilinuxkernel. ...

  5. 使用sizemask来确保索引不越界

    [使用sizemask来确保索引不越界] 在redis的字典实现中,有一个sizemask字段. 此字段的作用是当使用下标访问数据时,确保下标不越界. 如当前size为8时,sizemask为7(0x ...

  6. 读《asp.net MVC4开发指南(黄保翕编著)》笔记

    在刚刚过去的中秋节中,利用了两天的碎片时间把黄保翕编著的<asp.net MVC4 开发指南>看了遍,笔记如下,欢饮在开发MVC的同学一起来探讨: 1.社区 2.开源程序 3.易测试性 4 ...

  7. Python vars() 函数

    Python vars() 函数  Python 内置函数 描述 vars() 函数返回对象object的属性和属性值的字典对象. 语法 vars() 函数语法: vars([object]) 参数 ...

  8. 各种replace待续

    http://blog.163.com/chenjie_8392/blog/static/439339842010513128139/

  9. [leetcode]163. Missing Ranges缺失范围

    Given a sorted integer array nums, where the range of elements are in the inclusive range [lower, up ...

  10. 什么是Shell、Shell脚本

    Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁.Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解释和执行用户输入的命令:作为程序设计语言,它定义了各种 ...