C语言的指针
程序员文章站
2023-08-18 09:47:33
输出变量地址
#include
int main() {
int var1;
char var2[10];
printf("var1 变量的地址:...
输出变量地址
#include int main() { int var1; char var2[10]; printf("var1 变量的地址: %x\n", &var1); // %x表示按16进制输出 printf("var2 变量的地址: %x\n", &var2); return 0; }
var1 变量的地址: 5dc06b94 var2 变量的地址: 5dc06b9e
指针本质
指针是一个变量,其值为另一个变量的地址。
所有指针的值的实际数据类型都是一样的,不管是整型、浮点型、字符型,还是其他的数据类型,都是一个代表内存地址的长的十六进制数。不同数据类型的指针之间唯一的不同是,指针所指向的变量或常量的数据类型不同。
null指针
在变量声明的时候,如果没有确切的地址可以赋值,为指针变量赋一个 null 值是一个良好的习惯。赋为 null 值的指针被称为空指针。
null 指针是一个定义在标准库中的值为零的常量。
注意:这里的值为0不是指针指向0,而是指针对应的地址是0
#include int main() { int *ptr = null; printf("ptr 的值是 %x\n", ptr); return 0; }
ptr 的值是 0
在大多数的操作上,程序不允许访问地址为 0 的内存,因为该内存是操作系统保留的。然而,内存地址 0 有特别重要的意义,它表明该指针不指向一个可访问的内存位置。但按照惯例,如果指针包含空值(零值),则假定它不指向任何东西。
指针数组
指针数组的每个值都是一个地址,都指向一个相同类型的值。
例1
#include const int max = 3; int main() { int var[] = {10, 100, 200}; // 把ptr声明为一个数组,由max个整数指针组成。 // ptr中的每个元素,都是一个指向int值的指针。 int i, *ptr[max]; for (i = 0; i < max; i++) { ptr[i] = &var[i]; /* 赋值为整数的地址,&取地址 */ } for (i = 0; i < max; i++) { printf("value of var[%d] = %d\n", i, *ptr[i]); } return 0; }
value of var[0] = 10 value of var[1] = 100 value of var[2] = 200
例2
指针数组中的每个指针指向一个字符串
#include const int max = 4; int main() { /* 理解为这是一个 *char 组成的数组,每个元素都指向字符串的首地址 */ char *companies[] = {"apple", "google", "facebook", "pinterest"}; for (int i = 0; i < max; i++) { printf("value of companies[%d] = %s\n", i, companies[i]); } return 0; }
value of companies[0] = apple value of companies[1] = google value of companies[2] = facebook value of companies[3] = pinterest
下一篇: C语言基本教程 第11课:预处理的介绍