在C语言中,指针是一种存储变量地址的数据类型。通过使用指针,你可以间接地访问和修改存储在内存中的数据。下面是一个简单的指针编程示例,包括声明指针、初始化指针、访问指针指向的数据以及使用指针作为函数参数。
声明和初始化指针
首先,你需要声明一个指针变量,并使用取地址运算符`&`来获取变量的地址。然后,你可以将这个地址赋值给指针变量。
```c
include
int main() {
int a = 10;
int *ptr; // 声明一个指向整数的指针
ptr = &a; // 将变量a的地址赋值给指针ptr
// 打印变量a的大小、地址和值
printf("Size of the integer is %zu
", sizeof(int));
printf("Address of a is %p
", (void*)a);
printf("Value of a is %d
", a);
// 通过指针访问变量a的值
printf("Value of a via pointer is %d
", *ptr);
return 0;
}
```
访问指针指向的数据
要访问指针指向的数据,你需要使用解引用运算符`*`。
```c
include
int main() {
int a = 10;
int *ptr = &a;
printf("Value of a via pointer is %d
", *ptr);
return 0;
}
```
使用指针作为函数参数
指针可以作为函数的参数,这样你可以在函数内部修改传递的变量的值。
```c
include
// 交换两个整数的值
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int x = 10;
int y = 20;
int *px = &x;
int *py = &y;
printf("Before swap: x = %d, y = %d
", x, y);
swap(px, py);
printf("After swap: x = %d, y = %d
", x, y);
return 0;
}
```
指针与数组
在C语言中,数组名本身就是一个指向数组第一个元素的指针。
```c
include
int main() {
int arr = {1, 2, 3, 4, 5};
int *ptr = arr; // arr是数组的首地址
// 打印数组元素和指针地址
for (int i = 0; i < 5; i++) {
printf("arr[%d] = %d, ptr = %p
", i, arr[i], (void*)ptr);
ptr++; // 移动指针到下一个数组元素
}
return 0;
}
```
二级指针
二级指针是指向指针的指针,可以用来修改指针的值。
```c
include
int main() {
int a = 5;
int *p1 = &a;
int p2 = &p1;
printf("Value of a is %d
", *p1);
printf("Value of p1 is %p
", (void*)p1);
printf("Value of p2 is %p
", (void*)p2);
printf("Value pointed to by p2 (i.e., address of p1) is %p
", (void*)*p2);
printf("Value pointed to by *p2 (i.e., address of a) is %p
", (void*)(*p2));
return 0;
}
```
函数指针
函数指针是指向函数的指针,可以用来调用函数。