c语言指针6487572是谁的地址,C语言 第八章 针指

本文深入探讨了C语言中的指针概念,包括指针的初始化、类型转换、指针交换、数值交换、数组倒序及二维数组操作。通过多个示例展示了指针如何用于变量交换、数组操作以及函数参数传递,强调了指针在控制行数和二维数组交互中的作用。同时,还介绍了指针函数和返回函数指针的概念。
摘要由CSDN通过智能技术生成

[TOC]

第八章 针指

指针测试

#include

int main() {

int a=1000;

int *p;

p=&a;

printf("a=%d,&a=%d\n",a,&a);

printf("*p=%d,p=%d\n",*p,p);

a=521;

printf("a=%d,&a=%d\n",a,&a);

printf("*p=%d,p=%d\n",*p,p);

return 0;

}

打印结果

a=1000,&a=6487572

*p=1000,p=6487572

a=521,&a=6487572

*p=521,p=6487572

指针要求

必须同类型转换

指针必须给初值(实例化)

指针赋值的方式 int *p=&a;

或者 int a=100; int *p; p=&a;

指针指针先指向地址,然后才可以赋值

#include

int main() {

void fun(int *a,int *b);

int a=10;

int b=20;

int *p=&a, *q=&b;

int *temp;

printf("&a=%d &b=%d\n",&a,&b);

printf("p=%d q=%d\n",p,q);

if(a

temp=q; //p q 指针交换 a b 不受影响

q=p;

p=temp; //最大值打印*p

}

printf("&a=%d &b=%d\n",&a,&b);

printf("p=%d q=%d\n",p,q);

printf("%d\t%d",*p,*q);

return 0;

}

指针交换数值

#include

int main() {

void fun(int *a,int *b);

int a=10;

int b=20,c=0;

int *p=&a, *q=&b;

int *m;

m=&c;

if(a

{

*m=*p;

*p=*q;

*q=*m;

}

printf("max=%d\tmin=%d\n",a,b);

printf("max=%d\tmin=%d",*p,*q);

return 0;

}

数值交换指针+函数写法

#include

int main()

{

int a=10;

int b=20;

void change(int *,int *);

change(&a,&b);

printf("a=%d\tb=%d",a,b);

return 0;

}

void change(int *a,int *b)

{

int temp;

temp=*a;

*a=*b;

*b=temp;

}

指针倒序数组

#include

void inv(int a[],int size);

void xinginv(int *a,int size);

int main() {

int a[]= {1,2,3,4,5,6,7,8,9,10};

int *p;

p=a;

inv(a,10);

xinginv(p,10);

for(int i=0; i<10; i++) {

printf("%d\t",*(p+i));

}

return 0;

}

// 数组倒叙

void inv(int a[],int size) {

for(int i=0; i

int temp=0;

temp=a[size-i-1];

a[size-i-1]=a[i];

a[i]=temp;

}

}

void xinginv(int *p,int size) {

for(int i=0; i

int temp=0;

temp=*(p+i);

*(p+i)=*(p+size-i-1);

*(p+size-i-1)=temp;

}

}

二维数组利用指针表示

#include

int main() {

int a[3][4] {{1,2,3,4},{5,6,7,9},{10,11,12,13}}; //定义一个二维数组

printf("第0行地址%d\n",a);

printf("第1行地址%d\n",a+1);//地址输出 a+1 一行地址

printf("第2行地址%d\n",a+2);

printf("第0行0列地址%d\n",*a);

printf("第0行1列地址%d\n",*a+1);

printf("第0行2列地址%d\n",*a+2);

printf("第1行2列地址%d\n",*(a+1)+2); // *(a+1)+2 1行2列地址

// 二维数组要用指针输出值: 有两个** 或者两个[][]就可以

printf("第0行0列值%d\n",*(*a));

printf("第0行1列地址%d\n",*(*a+1));

printf("第0行2列地址%d\n",*(*a+2));

printf("第1行2列地址%d\n",*(*(a+1)+2));

printf("第2行2列值%d\n",*(a[2]+2));

//或者一个 *(a[2]+2) 表示值

for(int i=0; i<3; i++) {

for(int j=0; j<4; j++) {

printf("%8d",*(*(a+i)+j));

}

printf("\n");

}

printf("\n");

int *p; //*p =(*p)[1];

p=*a; //把一行的地址指向了p 指针还是一列 指针无行数 ,无限长

int (*q)[4];

q=a; //重要 ::::: 这是把指针控制了行数 ,有了行数,就转换为二维数组表示方式

for(; p

printf("(byte)%8d-%8d=(int)%d\n",p,a[0],p-a[0]);

}

p=*a;

printf("\n 打印");

for(; p

if((p-(*a))%4==0) {

printf("\n");

}

printf("%6d",*p);

}

return 0;

}

指针控制行数 和二维数组交互

#include

int main()

{

int a[3][4] {{1,2,3,4},{5,6,7,9},{10,11,12,13}};

int (*q)[4]=a;

//重要 ::::: 这是把指针控制了行数

for(int i=0;i<3;i++)

{

for(int j=0;j<4;j++)

{

printf("%8d",*(*(q+i)+j));

}

printf("\n");

}

return 0;

}

指针函数

#include

int main(){

int max(int x,int y);//声明

int add(int x,int y);

// 指向一个函数的指针

int (*p)(int,int); //只能指向一个返回值为int类型,有两个int参数的函数

p = max;//max表示函数在内存的地址

int z;

z = (*p)(7,8); //z = max(7,8);

printf("max = %d\n",z);

p = add;

z = (*p)(7,8);

printf("add = %d\n",z);

return 0;

}

int max(int x,int y){

if(x>y) return x;

else return y;

}

int add(int x,int y){

return (x+y);

}

返回函数指针

#include

int main() {

int *fun(int a,int b);

int *p= fun(1,2);

printf("*p=%8d \tp=%8d",*p,p);

return 0;

}

int *fun(int a,int b) {

int c=a+b;

return &c;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值