1.多级指针
#include <stdio.h>
int main() {
int i = 100;
int *p = &i; //一级指针
int **p_p = &p;//二级指针
int ***p_p_p = &p_p;//三级指针
printf("i的值:%d\n", i);
printf("i的值:%d\n", *p);
printf("i的值:%d\n", **p_p);
printf("i的值:%d\n", ***p_p_p);
return 0;
}
2.数组与数组指针
int main() {
int arr[] = {1, 2, 3, 4, 5, 6};
// arr表示首个元素的指针 arr[0]表示取出首个元素
printf("arr第0个元素的值:%d\n", arr[0]);
printf("arr第0个元素的值:%d\n", *arr);
printf("arr第4个元素的值:%d\n", arr[4]);
printf("arr第4个元素的值:%d\n", *(arr + 4));
}
3.采用指针遍历数组
int main() {
int arr[] = {1, 2, 3, 4, 5, 6};
for (int i = 0; i < sizeof arr / sizeof(int); ++i) {
printf("arr的第%d的值为:%d\n", i, *(arr + i));
}
printf("%s\n", "-------------------------");
for (int i = 0; i < sizeof arr / sizeof(int); ++i) {
printf("arr的第%d的值为:%d\n", i, arr[i]);
}
}
4.循环时给数组赋值
int main() {
int arr[] = {1, 2, 3, 4, 5, 6};
for (int i = 0; i < sizeof arr / sizeof(int); ++i) {
// arr[i] = arr[i] + 100;
*(arr + i) = *(arr + i) + 100;
}
printf("%s\n", "-------------------------");
for (int i = 0; i < sizeof arr / sizeof(int); ++i) {
printf("arr的第%d的值为:%d\n", i, arr[i]);
}
}
5.数组指针操作的几种方式
int main() {
int arr[] = {1, 9, 0, 9999};
int *arrP = arr;
for (int i = 0; i < 4; ++i) {
printf("%d\n", arrP[i]);
//printf("%d\n", *(arrP + i)); // + i 挪动元素3内存地址 再取元素3内存地址所对应的值
//printf("%d\n", *arrP + i); //*arrP取出数组的第一个元素
}
return 0;
}
6.指针类型有何用?
//指针类型的规定是为了:取值的时候,怎么取,这就是类型规定的好处
int main() {
int *pInt;
double *pDouble;
char *pChar;
printf("int指针的字节长度:%llu\n", sizeof pInt);// 4个字节(32) 4*2(64)
printf("double指针的字节长度:%llu\n", sizeof pDouble);// 4个字节(32) 4*2(64)
printf("char指针的字节长度:%llu\n", sizeof pChar);// 4个字节(32) 4*2(64)
return 0;
}
7.函数指针
//声明函数指针
void(*method)(int, int);
//实现函数指针
void add(int a, int b) {
printf("a+b=%d\n", a + b);
}
//实现函数指针
void reduce(int a, int b) {
printf("a-b=%d\n", a - b);
}
//在函数参数中 声明函数指针
void operate(void(*method)(int, int), int a, int b) {
method(a, b);
}
int main() {
method=add;
method(1,3);
operate(add, 1, 2);
operate(reduce, 4, 2);
}
网友评论