指针详注释二 (指向指针的指针)
#include <stdio.h>
int main()
{
int a = 10;
int *p = &a;
int **pp = &p;
// a = 20;
// *p = 20;
/*
(*pp) == p
*(*pp) == *p = a
**pp == *p = a
*/
**pp = 20;
printf("%d\n", a);
//int ***ppp = &pp;
/*
char a2 = 'A';
char *p2 = &a2;
*/
return 0;
}
指针例1
#include <stdio.h>
int main()
{
double d = 10.5;
double d2 = 10.5;
double *p;
p = &d;
*p = 10.9;
p = &d
*p = 10.9;
printf("d=%f, d2=%f\n", d, d2);
// 清空指针
p = 0;
// p = NULL;
// 清空指针后,不能再间接访问其他存储空间
// *p = 100.7;
return 0;
}
指针例2
#include <stdio.h>
void swap(int *v1, int *v2);
int main()
{
/*
int a = 10;
int b = 11;
swap(&a, &b);
*/
int a2 = 90;
int b2 = 89;
swap(&a2, &b2);
printf("a2=%d, b2=%d\n", a2, b2);
return 0;
}
/* 不能交换外面实参的值,仅仅是交换了内部指针的指向
void swap(int *v1, int *v2)
{
int *temp;
temp = v1;
v1 = v2;
v2 = temp;
}*/
// 完成两个整型变量值的互换
void swap(int *v1, int *v2)
{
int temp = *v1;
*v1 = *v2;
*v2 = temp;
}
/* 交换的只是内部v1、v2的值
void swap(int v1, int v2)
{
int temp = v1;
v1 = v2;
v2 = temp;
}*/
指针例3
#include <stdio.h>
int sumAndMinus(int n1, int n2, int *n3);
int main()
{
int a = 10;
int b = 7;
// 存储和
int he;
// 存储差
int cha;
he = sumAndMinus(a, b, &cha);
printf("和是%d, 差是%d\n", he, cha);
return 0;
}
// 返回值是
int sumAndMinus(int n1, int n2, int *n3)
{
*n3 = n1 - n2;
return n1 + n2;
}
指针例4
/*
%d int
%f float\double
%ld long
%lld long long
%c char
%s 字符串
%zd unsigned long
*/
#include <stdio.h>
/*
0000 0001
0000 0010
0000 0000
0000 0000
0000 0000 0000 0000 0000 0010 0000 0001
*/
int main()
{
// 0000 0000 0000 0000 0000 0000 0000 0010
int i = 2;
// 0000 0001
char c = 1;
char *p;
p = &c;
//*p = 10;
printf("c的值是%d\n", *p);
return 0;
}
void test()
{
char c; // 1
int a; // 4
long b; // 8
// 任何指针都占用8个字节的存储空间
char *cp;
int *ap;
long *bp;
printf("cp=%zd, ap=%zd, bp=%zd\n",
sizeof(cp),
sizeof(ap),
sizeof(bp));
}

浙公网安备 33010602011771号