目录
3.有一个整型数组 a,有5个元素,要求输出数组中的全部元素
1.交换变量值
#include <stdio.h>
void swap(int* x,int* y)
{
int m;
m = *x;
*x = *y;
*y = m;
}
int main() {
int i, j;
i = 2; j = 3;
swap(&i, &j);
printf("%d %d", i, j);
}
2.输入 a、b、c3 个整数,按大小顺序输出。
#include <stdio.h>
void swap(int* x,int* y)
{
int m;
m = *x;
*x = *y;
*y = m;
}
int main() {
int a, b, c;
int* p1;
int* p2;
int* p3;
scanf_s("%d %d %d", &a, &b,&c);
p1 = &a;
p2 = &b;
p3 = &c;
if (a < b)
swap(p1, p2);
if (b < c)
swap(p2, p3);
if (a < c)
swap(p1, p3);
printf("%d>%d>%d", a, b, c);
}
3.有一个整型数组 a,有5个元素,要求输出数组中的全部元素
3.1下标法
#include <stdio.h>
int main() {
int i, a[5];
for (i = 0; i < 5; i++)
scanf_s("%d", &a[i]);
for (i = 0; i < 5; i++)
printf("%d ", a[i]);
}
3.2通过数组名计算数组元素地址,找出元素的值
#include <stdio.h>
int main() {
int i, a[5];
for (i = 0; i < 5; i++)
scanf_s("%d", a+i);
for (i = 0; i < 5; i++)
printf("%d ", *(a+i));
}
3.3用指针变量指向数组元素
#include <stdio.h>
int main() {
int i, a[5],*p;
p = a;
for (i = 0; i < 5; i++)
scanf_s("%d", p+i);
for (i = 0; i < 5; i++)
printf("%d ", *(p+i));
}
4.获取数组最大值及其下标
#include <stdio.h>
#define len 10
int main(){
int i, index, max;
int arr[len] = { 7,8,4,5,3,6,2,6,1,9 };
int* p = arr;
max = 0;
for (i = 0; i < len; i++,p++) {
if (*p > max) {
max = *p;
index = i;
}
}
printf("最大值为arr[%d]=%d\n", index, max);
}
5.strlen函数模拟---指针-指针
#include <stdio.h>
int my_strlen(char* str)//递归
{
if (*str != '\0')
return 1 + my_strlen(str + 1);
else
return 0;
}
int my_strlen2(char* str)//非递归
{
int count = 0;
while (*str != '\0') {
count++;
str++;
}
return count;
}
int my_strlen3(char* str) //指针-指针
{
char* start = str;
while (*str != '\0') {
str++;
}
return str - start;
}
int main() {
char arr[] = "abc";
printf("%d\n", my_strlen(arr));
printf("%d\n", my_strlen2(arr));
printf("%d\n", my_strlen3(arr));
return 0;
}
6.指针数组与数组指针
#include <stdio.h>
int main() {
int arr[10] = { 1,2,3,4,5 };
int(*parr)[10] = &arr;//存放数组的地址
double* d[5];//指针数组
double* (*pd)[5] = &d;//pd是一个数组指针
}
#include <stdio.h>
int main() {
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int(*parr)[10] = &arr;//数组指针,存放数组的地址
int i = 0;
for (i = 0; i< 10; i++) {
printf("%d\t", *((*parr) + i));//*parr相当于数组名相当于首元素地址
}
}
#include <stdio.h>
void print1(int arr[3][5], int r, int c) {
int i, j;
for (i = 0; i < r; i++) {
for (j = 0; j < c; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
}
void print2(int (*p)[5], int r, int c) {
int i, j;
for (i = 0; i < r; i++) {
for (j = 0; j < c; j++) {
printf("%d ", *(*(p+i)+j));
}
printf("\n");
}
}
int main() {
int arr[3][5] = { {1,2,3,4,5 }, { 2,3,4,5,6 }, { 3,4,5,6,7 }};
print1(arr, 3, 5);
print2(arr, 3, 5);
return 0;
}
数组名是数组首元素的地址
但是有两个意外:
1.sizeof(数组名)-----数组名表示整个数组,计算的是整个数组的大小,单位是字节
2.&数组名----数组名表示整个数组,取出的是整个数组的地址