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;
}