一,指针
1.3 指针应用
1.3,1 函数计算
交换变量,*pa表示这个地址上的变量,通过地址访问到了这个变量
A B的地址不变,值做了交换
#include<stdio.h>
int swap(int*pa,int*pb);
int main(){
int a=7;
int b=90;
printf("%d的地址是%p\n%d的地址是%p\n",a,&a,b,&b);
swap(&a,&b);
printf("%d的地址是%p\n%d的地址是%p\n",a,&a,b,&b);
return 0;
}
int swap(int*pa,int*pb) {
int t=0;
t=*pa;
*pa=*pb;
*pb=t;
}
#include<stdio.h>
int maxmin(int a[], int s, int* max, int* min);
//数组作为函数参数,要用另一个数传入数组大小
int main() {
const int s = 100;
int a[100] = { 0 };
int i, t;
int la = 0; int nu = 0;
int max = 0;
int min = 0;
for (i = 0; i < s; i++) {
scanf_s("%d", &la);
if (la >= 0) {
nu++;
a[i] = la;
//这里不能再加一个输入循环!如果加了,输入一个数字,不做运算,
// 跳出IF,又输入,就会每次少一个数子记入数组
}
else {
break;
}
}
{
for (i = 0; i < s; i++) {
printf("A[%d]=%d\t", i, a[i]);
if ((i + 1) % 10 == 0) {
printf("\n");
}
}
}
maxmin(a, s, &max, &min);
printf("%d个学生,最高成绩为%d,最低成绩为%d", nu, max, min);
return 0;
}
int maxmin(int a[], int s, int* max, int* min) {
*max = *min = a[0];
int i = 0;
for (i = 0; i < s; i++) {
if (*max < a[i]) {
*max = a[i];
}
if (*min > a[i]) {
*min = a[i];
}
}
//return *max,*min;要不要都行?
}
1.3.2 函数返回
笑死,我的疑惑刚好是男神的下一个知识点,一般函数的状态,用函数的返回,运算的结果需要的值,用指针返回
#include<stdio.h>
int divide(int a, int b, int* c);
int main() {
int a;
int b;
int c;
scanf_s("%d %d", &a, &b);
if (divide(a, b, &c)) {
printf("%d/%d=%d\n", a, b, c);
}
return 0;
}
int divide(int a, int b, int* c) {
int ret=1;
if (b == 0) {
ret = 0;
}
else {
*c = a / b;
}
return ret;
}
1.3.3 传入函数的数组
main a=400,maxmin a=8——男神32位是4,刚好是一个地址的大小,男神的注释说传的不是‘int a[]'的大小,而是INT*的,
#include<stdio.h>
int maxmin(int a[], int s, int* max, int* min);
//数组作为函数参数,要用另一个数传入数组大小
int main() {
const int s = 10;
int a[10] = {4,5,223,23, };
printf("sizeof main a[]=%lu\n", sizeof(a));
printf("main a=%p\n", a);
int max = 0;
int min = 0;
printf("进入函数前a[0]=%d\n", a[0]);
maxmin(a, s, &max, &min);
printf("进入函数后a[0]=%d\n", a[0]);
printf("最高成绩为%d,最低成绩为%d\n", max, min);
//[]不仅可以对数组使用,也可也对指针使用
int* p = &min;
printf("&min-->%p\n", min);
printf("*p-->%p\n", *p);//*p是存在P记录的地址上的变量,再求*P的地址,就是&min的地址?
printf("p[0]-->%p\n", p[0]);
printf("*a=%d\n", *a);
//
return 0;
}
int maxmin(int a[], int s, int* max, int* min) {
*max = *min = a[0];
printf("sizeof maxmin a[]=%lu\n", sizeof(a));
printf("maxmin a=%p\n", a);
a[0] = 1000;
int i = 0;
for (i = 0; i < s; i++) {
if (*max < a[i]) {
*max = a[i];
}
if (*min > a[i]) {
*min = a[i];
}
}
}
A是指针很好理解
为什么在函数里面留一个空的方括号,为什么写数字也没用,为什么函数里面没有办法SIZEOF得到正确的数组大小,因为A是指针????
函数括号里面改成INT *A ,INT*A[] ,INT A[]都可以,就是A不行
[ ]运算符和*运算符都是可以对指针 数组做的
数组变量是CONST变量,不能赋值,INT A[ ]-->INT *CONST A
立FLAG,早睡早起,好好学习