1. 指针的定义,指针的运算
int main(){
int a = 10;
int *p;
p = &a;
*p = *p + 10;
printf("p : %d , a:%d\n", *p, a);
int y = 1 + *p;
printf("y : %d\n",y);
*p += 1;
printf("p : %d , a:%d\n", *p, a);
(*p)++;
printf("p : %d , a:%d, p address:%#x \n", *p, a,p);
*p++;
printf("p : %d , a:%d, p address:%#x \n", *p, a,p);
system("pause");
return 0;
}
2. 数组与指针
int main(){
int a[5];
int *p = a;
int i;
printf("%#x\n",a);
for ( i = 0; p < a + 5; p++)
{
*p = i;
i++;
}
int b[5] = {1,2,3,4,5};
int *z;
z = b;
z = z + 1;
printf("z: %d\n",*z);
system("pause");
return 0;
}
3. 指针变量名
int main(){
int a = 9;
int *p = &a;
char *cp = "Hello";
printf("sizeof(p):%d , sizeof(cp):%d \n", sizeof(p),sizeof(cp));
printf("p address:%#x\n",p);
p++;
printf("p address:%#x\n", p);
printf("cp address:%#x\n", cp);
cp++;
printf("cp address:%#x\n", cp);
system("pause");
return 0;
}
4. 指针与函数参数
void swap(int c, int d){
printf("c address:%#x,d address:%#x \n", &c, &d);
int temp;
temp = c;
c = d;
d = temp;
}
// 形参的修改不能带来实参的修改
// 将 a b 的地址copy给了形参,然后将这个copy的地址进行了切换,而地址所指的值是没有变的
void swap2(int *a, int *b){
int *temp;
temp = a; // a address 给了temp
a = b; // a的地址变成了b的地址
b = temp; // b的地址变成了a的地址
printf("a address:%#x,b address:%#x \n", a, b);// 这里是二级指针,不要写成&a,&b
}
void swap3(int *a, int *b){
printf("a address:%#x,b address:%#x \n", a, b);
int temp;
temp = *a;
*a = *b;
*b = temp;
}
int main(){
//int a, b;
//a = 10;
//b = 5;
//printf("a address:%#x,b address:%#x \n",&a,&b);
//swap(a,b);
//printf("a = %d, b=%d\n",a,b);
// a address : 0x73fe58, b address : 0x73fe4c
// c address : 0x73fd74, d address : 0x73fd78
// a = 10, b = 5
// =======================================
int a, b;
a = 10;
b = 5;
printf("a address:%#x,b address:%#x \n", &a, &b);
swap2(&a, &b);
printf("a = %d, b=%d\n", a, b);
system("pause");
// a address:0x26fd08,b address:0x26fcfc
// a address : 0x26fcfc, b address : 0x26fd08
// a = 10, b = 5
// 还是不行,为什么呢?
// =======================================
//int a, b;
//a = 10;
//b = 5;
//printf("a address:%#x,b address:%#x \n", &a, &b);
//swap3(&a, &b);
//printf("a = %d, b=%d\n", a, b);
//system("pause");
return 0;
}
5. 指针数组 ,数组指针
void sort(char *name[], int n);
int main(){
char *name[] = {"hello","zeking","learning","jNI"};
int i, n = 4;
sort(name,n);
for (i = 0; i < n; i++){
printf("%s\n",name[i]);
}
char(*p2)[5];
system("pause");
return 0;
}
void sort(char *name[], int n){
char *temp;
int i,j;
for (i = 0; i < n; i++){
for (j = 0; j < n - 1; j++){
if (strcmp(name[j],name[j+1])>0){
temp = name[j];
name[j] = name[j + 1];
name[j + 1] = temp;
}
}
}
}
6. 二级指针
int main(){
int a = 100;
int *p;
p = &a;
int **p2;
p2 = &p;
int * * p3;
system("pause");
return 0;
}