2、预备知识
指针
指针的重要性:
? ?????指针是C语言的灵魂
定义: ?????地址:
? ??????????内存单元的编号
? ??????????从0开始的非负整数
? ??????????范围:0 – FFFFFFFF(32位的计算机:地址范围:0~4G-1)
? ?????指针:
? ??????????指针就是地址,地址就是指针。
? ??????????指针变量是存放内存单元地址的变量
? ??????????指针的本质是一个操作受限的非负整数
? 分类:
-
基本类型的指针 #include<stdio.h>
int main(void)
{
int* p;
int i = 10;
int j;
p = &i;
j = *p;
printf("i = %d, j = %d, *p = %d\n", i, j, *p);
return 0;
}
#include<stdio.h>
void f(int* p)
{
*p = 100;
}
int main(void)
{
int i = 9;
f(&i);
printf("i = %d\n", i);
return 0;
}
-
指针和数组的关系 #include<stdio.h>
int main(void)
{
int a[5] = { 1,2,3,4,5 };
int j = 3[a];
printf("j = %d\n", j);
return 0;
}
#include<stdio.h>
void show_array(int* p, int len)
{
int i;
for (i = 0; i < len; i++)
printf("%d\n", p[i]);
}
int main(void)
{
int a[5] = { 1,2,3,4,5 };
show_array(a, 5);
return 0;
}
所有的指针变量只占4个子节 用第一个字节的地址表示整个变量的地址
eg:
#include<stdio.h>
int main(void)
{
double* p;
double x = 66.6;
p = &x;
double arr[3] = { 1.1,2.2,3.3 };
double* q;
q = &arr[0];
printf("%p\n", q);
q = &arr[1];
printf("%p\n", q);
return 0;
}
如何通过函数修改实参的值?
#include<stdio.h>
void f(int ** q);
int main(void)
{
int i = 10;
int * p = &i;
printf("%p\n",p);
f(&p);
printf("%p\n",p);
return 0;
}
void f(int ** q)
{
*q = (int *)0xFFFFFFFF;
}
|