来自网络,联系侵删
129 字
1 分钟
指针进阶
一、指针基础操作
1.1 间接寻址
#include <stdio.h>
int main(){ int a = 100, b = 10; int *p1, *p2; p1 = &a; p2 = &b; printf("%p, %d\n", &a, b); printf("%p, %d", &p1, *p2);}1.2 指针求最大值
#include <stdio.h>
int main(){ int *p1, *p2, *p, a, b; scanf("%d,%d", &a, &b); p1 = &a; p2 = &b; if (a < b) { p = p1; p1 = p2; p2 = p; } printf("a=%d,b=%d\n", a, b); printf("max=%d,min=%d\n", *p1, *p2);}1.3 指针排序(三个数由小到大)
#include <stdio.h>
int main(){ int a, b, c, t; int i, *p = &i; int *p1 = &a, *p2 = &b, *p3 = &c; scanf("%d,%d,%d", &a, &b, &c); if (*p1 > *p2) { t = *p1; *p1 = *p2; *p2 = t; } if (*p1 > *p3) { t = *p1; *p1 = *p3; *p3 = t; } if (*p2 > *p3) { t = *p2; *p2 = *p3; *p3 = t; } printf("%d,%d,%d\n", *p1, *p2, *p3);}二、值传递与地址传递
2.1 值传递(无法交换)
#include <stdio.h>
swap(int x, int y){ int t; t = x; x = y; y = t;}
int main(){ int a, b; int *pa, *pb; scanf("%d,%d", &a, &b); pa = &a; pb = &b; if (a < b) swap(*pa, *pb); printf("\n%d,%d\n", a, b);}2.2 地址传递(交换指针本身,无法交换值)
#include <stdio.h>
swap(int *p1, int *p2){ int *p; p = p1; p1 = p2; p2 = p;}
int main(){ int a, b; int *pa, *pb; scanf("%d,%d", &a, &b); pa = &a; pb = &b; if (a < b) swap(pa, pb); printf("%d,%d", *pa, *pb);}2.3 地址传递(交换指针指向的值,正确方式)
#include <stdio.h>
swap(int *p1, int *p2){ int t; t = *p1; *p1 = *p2; *p2 = t;}
int main(){ int a, b; int *pa, *pb; scanf("%d,%d", &a, &b); pa = &a; pb = &b; if (a < b) swap(pa, pb); printf("\n%d,%d\n", a, b);}三、指针与数组
3.1 指针操作二维数组
#include<stdio.h>#define M 3#define N 4
void InputArray(int (*a)[N], int m, int n){ int i, j; for(i = 0; i < m; i++) { for(j = 0; j < n; j++) { scanf("%d", &(*(*(a+i)+j))); } }}
void PrintArray(int (*a)[N], int m, int n){ int i, j; for(i = 0; i < m; i++) { for(j = 0; j < n; j++) { printf("%d ", *(*(a+i)+j)); } printf("\n"); }}
int main(){ int a[M][N] = {1,2,3,4,5,6,7,8,9,10,11,12}; InputArray(a, M, N); PrintArray(a, M, N); return 0;}四、命令行参数
#include<stdio.h>
int main(int argc, char *argv[]){ int k; for(k = 1; k < argc; k++) printf("%s ", argv[k]); printf("\n"); return 0;}五、动态内存分配
5.1 动态数组
#include<stdio.h>#include <stdlib.h>
int main(){ int n, sum, i, *p; printf("Enter n: "); scanf("%d", &n); if ((p = (int*)malloc(n * sizeof(int))) == NULL) { printf("Not able to allocate memory.\n"); exit(1); } printf("Enter %d integers: ", n); for (i = 0; i < n; i++){ scanf("%d", p+i); } sum = 0; for (i = 0; i < n; i++){ sum = sum + *(p+i); } printf("The sum is %d\n", sum); free(p); return 0;} 分享
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时
相关文章 智能推荐












