指针运算
参见这里==> http://c.jpkc.cqepc.com.cn/c_resource/C_Cai_assistant/9/9-2.htm
#include <iostream>
using namespace std;
/*
输出:
10 20 30 40 50
0x7e17f0
10
0x7e17f4
20
-----------------
0x7e17f4
20
0x7e17f4
21
-----------------
0x7e17f4
21
30
-----------------
0x7e17f8
30
31
0x7e17f8
31
-----------------
*/
int main(){
//int数组{10,20,30,40,50}
int *p=(int *)malloc(5*sizeof(int));
for(int i=0;i<5;i++){
*(p+i)=(i+1)*10;
}
//输出值
for(int i=0;i<5;i++){
cout<<*(p+i)<<"\t";
}
cout<<endl;
//*p++
cout<<p<<endl;
cout<<*p++<<endl; //这里的++是对指针的运算
cout<<p<<endl;
cout<<*p<<endl;
cout<<"-----------------"<<endl;
//(*p)++
cout<<p<<endl;
cout<<(*p)++<<endl; //这里的++是对指针指向的内容运算
cout<<p<<endl;
cout<<*p<<endl;
cout<<"-----------------"<<endl;
//*++p; ==> 指++ ,再取出指向的单元内容
cout<<p<<endl;
cout<<*p<<endl;
cout<<*++p<<endl;
cout<<"-----------------"<<endl;
//++*p; ==> 指针指向的内容加1
cout<<p<<endl;
cout<<*p<<endl;
cout<<++*p<<endl;
cout<<p<<endl;
cout<<*p<<endl;
cout<<"-----------------"<<endl;
free(p);
system("pause");
return 0;
}
**************************************************************
指针常量,指针变量(sizeof使用注意)
1. 关于sizeof()
(1) int h[10];
sizeof(h)==10*4 //h:指针常量
(2) int *h;
sizeof(h)==4 //h:指针变量
(3) void fun(int h[10]){
sizeof(h)==4 //h:指针变量
}
2. 指针常量,指针变量
在传参数的时候,实参是指针常量,那个副本指针就成了指针变量了
(1)指针常量:指针h内容不能修改,指向的地址内容也可以修改
(2)指针变量:指针h内容可以修改,指向的地址内容也可以修改
#include <stdio.h>
#include <iostream>
using namespace std;
int h[10];
bool flag=false;
void print(){
int i;
for(i=0;i<10;i++){
printf("%d\t",h[i]);
}
printf("\n");
}
void fun(int *h){
int i;
for(i=0;i<10;i++)
h[i]=i;
}
void fun1(int* h){
memset(h,0,sizeof(h));
}
void fun2(int h[10]){
memset(h,-1,sizeof(h));
}
int main(void){
print();
fun(h);
print();
fun1(h);
print();
fun2(h);
print();
memset(h,-1,sizeof(h));
print();
return 0;
}
心得:
一般在使用memset()时,都不要将memset()放到子程序中初始化一个指针参数对应数组,直接在外面memset()就好了。避免出错!