关于指针

来源:互联网 发布:淘宝排名怎么靠前 编辑:程序博客网 时间:2024/05/05 09:11
/*
   函数作业
*/
#include <stdio.h>
/*void reverse(int arr[], int size) {
int pos1 = 0, pos2 = size - 1;
while (pos1 < pos2) {
        int tmp = arr[pos1];
arr[pos1] = arr[pos2];
arr[pos2] = tmp;
pos1++;
pos2--;
}
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int num = 0;
    reverse(arr, 5);
for (num = 0;num <= 4;num++) {
printf("%d ", arr[num]);
}
printf("\n");
return 0;
}*/
int arr[] = {1, 2, 3, 4, 5};
void reverse(void) {
int pos1 = 0, pos2 = 4;
while (pos1 < pos2) {
        int tmp = arr[pos1];
arr[pos1] = arr[pos2];
arr[pos2] = tmp;
pos1++;
pos2--;
}
}
int main() {
int num = 0;
    reverse();
for (num = 0;num <= 4;num++) {
printf("%d ", arr[num]);
}
printf("\n");
return 0;

}



/*
   指针演示
   */
#include <stdio.h>
int main() {
int num = 0;
int *p_num = NULL;   //指针变量的声明
p_num = &num;
*p_num = 10;
printf("num是%d\n", num);
return 0;
}



/*
   指针练习
   */
#include <stdio.h>
int main() {
int num = 0, num1 = 0, num2 = 0, tmp = 0;


/*int *p_num = &num;
int *p_num1 = &num1;
int *p_num2 = &num2;
int *p_tmp = &tmp;*/


int *p_num = &num, *p_num1 = &num1, *p_num2 = &num2, *p_tmp = &tmp;
printf("请输入三个数字:");
scanf("%d%d%d", p_num, p_num1, p_num2);



/*if (*p_num > *p_num1 && *p_num > *p_num2) {
if (*p_num1 > *p_num2) {
printf("%d %d %d\n", *p_num, *p_num1, *p_num2);
}
else {
printf("%d %d %d\n", *p_num, *p_num2, *p_num1);
}
}
else if (*p_num1 > *p_num && *p_num1 > *p_num2) {
if (*p_num > *p_num2) {
printf("%d %d %d\n", *p_num1, *p_num, *p_num2);
}
else {
printf("%d %d %d\n", *p_num1, *p_num2, *p_num);
}
}
else {
if (*p_num > *p_num1) {
printf("%d %d %d\n", *p_num2, *p_num, *p_num1);
}
else {
printf("%d %d %d\n", *p_num2, *p_num1, *p_num);
}
}*/



/*if (*p_num < *p_num1) {
        *p_tmp = *p_num;
*p_num = *p_num1;
*p_num1 = *p_tmp;
}
if (*p_num < *p_num2) {
*p_tmp = *p_num;
*p_num = *p_num2;
*p_num2 = *p_tmp;
}
if (*p_num1 < *p_num2) {
*p_tmp = *p_num1;
*p_num1 = *p_num2;
*p_num2 = *p_tmp;
}
printf("%d %d %d\n", *p_num, *p_num1, *p_num2);*/



if (*p_num < *p_num1) {
p_tmp = p_num;
p_num = p_num1;
p_num1 = p_tmp;
}
if (*p_num < *p_num2) {
p_tmp = p_num;
p_num = p_num2;
p_num2 = p_tmp;
}
    if (*p_num1 < *p_num2) {
p_tmp = p_num1;
p_num1 = p_num2;
p_num2 = p_tmp;
}
printf("%d %d %d\n", *p_num, *p_num1, *p_num2);
return 0;
}









/*
   指针演示
   */
#include <stdio.h>
int main() {
int *p_num = NULL;
char *p_ch = NULL;
int num = 300;
printf("sizeof(p_num)是%d,sizeof(p_ch)是%d\n", sizeof(p_num), sizeof(p_ch));  // 4    4
p_num = &num;
p_ch = &num;
printf("*p_num是%d,*p_ch是%d\n", *p_num, *p_ch);//  300    44
printf("*(char*)p_num是%d\n", *(char*)p_num); // 44
return 0;
}


/*
   指针练习
   */
#include <stdio.h>
int main() {
float   fnum = 1.0f;
int *p_num = &fnum;
//printf("fnum是%x\n", fnum);//   
//printf("fnum是%d\n", (int)fnum);  
printf("*p_num是0x%x\n", *p_num);  
return 0;
}



/*
   无类型指针演示
   */
#include <stdio.h>
int main() {
int num = 10;
char ch = 'a';
float fnum = 1.0f;
void *p_void = NULL;
p_void = &num;
printf("%d\n", *(int*)p_void);
p_void = &ch;
printf("%c\n", *(char*)p_void);
p_void = &fnum;
printf("%g\n", *(float*)p_void);
return 0;
}


/*
   指针计算演示
   */
#include <stdio.h>
int main() {
int arr[] = {1, 2, 3, 4, 5};
int num = 0;
int *p_num = &num;
short *p_snum = &num;
printf("p_num是%p, p_num + 3是%p\n", p_num, p_num + 3);
printf("p_snum是%p,p_snum + 3是%p\n", p_snum, p_snum + 3);
printf("&arr[4] - &arr[1]是%d\n", &arr[4] - &arr[1]);
return 0;
}




/*
   指针和数组关系演示
   */
#include <stdio.h>
int main() {
int arr[] = {1, 2, 3, 4, 5};
int num = 0, sum = 0;
int *p_num = arr;
/*for (num = 0;num <= 4;num++) {
printf("%d ", arr[num]);
printf("%d ", p_num[num]);
printf("%d ", *(arr + num));
printf("%d ", *(p_num + num));
}*/
for (p_num = arr;p_num <= arr + 4;p_num++) {
printf("%d ", *p_num);
}
for (p_num = arr;p_num <= arr + 4;p_num++) {
sum += *p_num;
}
printf("\n");
printf("求和结果是%d\n", sum);
return 0;
}




/*
   const指针演示
   */
#include <stdio.h>
int main() {
int num = 10;
const int *p_num = &num;
//*p_num = 12;    错误
p_num = NULL;     //正确
int * const p_num1 = &num;
*p_num1 = 12;     //正确
//p_num1 = NULL;  错误
return 0;
}



/*
   指针作业
   */
#include <stdio.h>
int main() {
int arr[] = {1, 2, 3, 4, 5}, num = 0;
int *p_num1 = arr, *p_num2 = arr + 4;
while (p_num1 < p_num2) {
int tmp = *p_num1;
*p_num1 = *p_num2;
*p_num2 = tmp;
p_num1++;
p_num2--;
}
for (num = 0;num <= 4;num++) {
printf("%d ", arr[num]);
}
printf("\n");
return 0;
}


/*
   指针形参练习
   */
#include <stdio.h>
void reverse(int *p_num, int size) {
int *p_num1 = p_num, *p_num2 = p_num + size - 1;
while (p_num1 < p_num2) {
int tmp = *p_num1;
*p_num1 = *p_num2;
*p_num2 = tmp;
p_num1++;
p_num2--;
}
}
int main() {
int arr[] = {1, 2, 3, 4, 5}, num = 0;
reverse(arr, 5);
for (num = 0;num <= 4;num++) {
printf("%d ", arr[num]);
}
printf("\n");
return 0;
}


/*
   指针形参演示
   */
#include <stdio.h>
void func(int *p_num) {
printf("num是%d\n", *p_num);
}
int main() {
int num = 0;
func(&num);
return 0;
}


/*
   指针形参演示
   */
#include <stdio.h>
void swap(int *p_num, int *p_num1) {
int tmp = *p_num;
*p_num = *p_num1;
*p_num1 = tmp;
/*
  错误做法如下
int *p_tmp = p_num;
p_num = p_num1;
p_num1 = p_tmp;
*/
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int num = 3, num1 = 7;
int *p_num = arr, *p_num1 = arr + 4;
swap(&num, &num1);
printf("num是%d,num1是%d\n", num, num1);
while (p_num < p_num1) {
swap(p_num, p_num1);
p_num++;
p_num1--;
}
for (num = 0;num <= 4;num++) {
printf("%d ", arr[num]);
}
printf("\n");
return 0;
}





/*
   指针形参演示
   */
#include <stdio.h>
void print(void *p_num, int type) {
if (type == 1) {
printf("%c\n", *(char*)p_num);
}
else if (type == 2) {
printf("%d\n", *(int*)p_num);
}
else {
printf("%g\n", *(float*)p_num);
}
}
int main() {
int num = 10;
char ch = 'a';
float fnum = 1.5f;
print(&ch, 1);
print(&num, 2);
print(&fnum, 3);
return 0;
}


/*
   指针作为返回值演示
   */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int *create(int *p_num, int size) {
    int num = 0;
for (num = 0;num <= size - 1;num++) {
//p_num[num] = rand() % 36 + 1;
*(p_num + num) = rand() % 36 + 1;
}
return p_num;
}
int main() {
int num = 0, arr[7] = {};
int *p_num = NULL;
srand(time(0));
p_num = create(arr, 7);
for (num = 0;num <= 6;num++) {
printf("%d ", arr[num]);
}
printf("\n");
return 0;
}
                    


/*
   指针返回值练习
   */
#include <stdio.h>
int *reverse(int *p_num, int size) {
int *p_num1 = p_num, *p_num2 = p_num + size - 1;
while (p_num1 < p_num2) {
int tmp = *p_num1;
*p_num1 = *p_num2;
*p_num2 = tmp;
p_num1++;
p_num2--;
}
return p_num;
}
int main() {
    int arr[] = {1, 2, 3, 4, 5};
int num = 0, *p_num = NULL;
p_num = reverse(arr, 5);
for (;p_num <= arr + 4;p_num++) {
printf("%d ", *p_num);
}
printf("\n");
return 0;
}






0 0