副标题#e#
1. 通过 &变量 可以获取变量地点:
#include <stdio.h>
int main(void)
{
int num = 10;
printf("变量值: %d\n",num);
printf("变量址: %d\n",&num);
getchar();
return 0;
}
2. 暗示变量地点的变量就是指针:
#include <stdio.h>
int main(void)
{
int num = 10;
int *p = #
printf("%d,%p\n",num,p);
getchar();
return 0;
}
3. *指针 就如同变量自己是一样的:
#include <stdio.h>
int main(void)
{
int num = 10;
int *p = #
printf("%d,%p,%d\n",num,p,*p);
*p = 11;
printf("%d,%p,%d\n",num,p,*p);
(*p)++;
printf("%d,%p,%d\n",num,p,*p);
num = 99;
printf("%d,%p,%d\n",num,p,*p);
getchar();
return 0;
}
4. 声明指针时要留意初始化,没有初始化的指针是危险的:
#include <stdio.h>
int main(void)
{
int n1 = 11;
int n2 = 22;
int *p = NULL; /* 初始化为空 */
p = &n1;
printf("%d,%p,%d\n",n1,p,*p);
p = &n2;
printf("%d,%p,%d\n",n2,p,*p);
getchar();
return 0;
}
#p#副标题#e#
5. 为什么没有初始化的指针是危险的:
#include <stdio.h>
int main(void)
{
int *p;
// 上面的指针p没有初始化话,但它也有个垃圾地点
printf("%p\n",p);
// 此时假如给它赋值,谁知道会包围了什么?
//*p = 100; /* 不要执行这个 */
getchar();
return 0;
}
6. 指向常量的指针: 不能通过指针修改它指向的值,但该值可以通过其变量修改
#include <stdio.h>
int main(void)
{
int n1 = 111;
int n2 = 222;
const int *p = &n1; /* 留意 const 的利用 */
printf("%d,%p,%d\n",n1,p,*p);
n1 = 333;
//*p = 333; /* 不行以这样,因为此刻的指针是常量 */
printf("%d,%p,%d\n",n1,p,*p);
p = &n2; /* 可以改变指针的指向 */
printf("%d,%p,%d\n",n2,p,*p);
getchar();
return 0;
}
7. 常量指针: 锁定指针的指向
#include <stdio.h>
int main(void)
{
int n1 = 111;
int n2 = 222;
int *const p = &n1; /* 留意 const 的利用 */
printf("%d,%p,%d\n",n1,p,*p);
n1 = 333;
//*p = 333; /* 不行以这样,因为此刻的指针是常量 */
printf("%d,%p,%d\n",n1,p,*p);
// p = &n2; /* 此刻不行以改变指针的指向了 */
// printf("%d,%p,%d\n",n2,p,*p);
getchar();
return 0;
}
8. 指针是有范例的:
#include <stdio.h>
int main(void)
{
long n = 100L;
float f = 1.5f;
double d = 3.14159265;
long *p1 = &n;
float *p2 = &f;
double *p3 = &d;
printf("%ld\n",*p1);
printf("%g\n",*p2);
printf("%.8f\n",*p3);
getchar();
return 0;
}
9. 令人疑惑的指针界说:
到底应该奈何写:
int *p;
int * p;
int* p;
因为 C 语言忽略空缺,这些都是对的,但下面的例子会说明哪个更好:
#include <stdio.h>
int main(void)
{
int n1,n2,*p; /* 界说了两个整数(n1、n2),和一个整数指针(p) */
n1 = 111;
n2 = 222;
p = &n1;
printf("%d,%p\n",*p,p);
p = &n2;
printf("%d,%p\n",*p,p);
getchar();
return 0;
}
返回“学点C语言 – 目次”