C語言 第八章 針指

[TOC]

第八章 針指

指針測(cè)試


#include<stdio.h>
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;
}

打印結(jié)果

a=1000,&a=6487572
*p=1000,p=6487572
a=521,&a=6487572
*p=521,p=6487572

指針要求

  • 必須同類型轉(zhuǎn)換

  • 指針必須給初值(實(shí)例化)

  • 指針賦值的方式 int *p=&a;

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

  • 指針指針先指向地址,然后才可以賦值

#include<stdio.h>
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<b) { 
        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;
}

指針交換數(shù)值


#include<stdio.h>
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<b)
    {
        *m=*p;
        *p=*q;
        *q=*m;
    }
    printf("max=%d\tmin=%d\n",a,b);
     printf("max=%d\tmin=%d",*p,*q);
    
    return 0;
}

數(shù)值交換指針+函數(shù)寫法

#include<stdio.h>
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;
     }

指針倒序數(shù)組

#include<stdio.h>
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;
}
// 數(shù)組倒敘
void inv(int a[],int size) {
    for(int i=0; i<size/2; 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<size/2; i++) {
        int temp=0;
        temp=*(p+i);
        *(p+i)=*(p+size-i-1);
        *(p+size-i-1)=temp;
    }


}

二維數(shù)組利用指針表示

#include<stdio.h>
int main() {
    int a[3][4] {{1,2,3,4},{5,6,7,9},{10,11,12,13}}; //定義一個(gè)二維數(shù)組
    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列地址

//  二維數(shù)組要用指針輸出值: 有兩個(gè)** 或者兩個(gè)[][]就可以
    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));
    //或者一個(gè) *(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   指針還是一列   指針無行數(shù)  ,無限長(zhǎng)
    int (*q)[4];
    q=a;   //重要 ::::: 這是把指針控制了行數(shù)  ,有了行數(shù),就轉(zhuǎn)換為二維數(shù)組表示方式
    for(; p<(*a)+12; p++) {
        printf("(byte)%8d-%8d=(int)%d\n",p,a[0],p-a[0]);
    }


    p=*a;
    printf("\n  打印");
    for(; p<(*a)+12; p++) {
        if((p-(*a))%4==0) {
            printf("\n");
        }
        printf("%6d",*p);
    }
    return 0;
}

指針控制行數(shù) 和二維數(shù)組交互

#include<stdio.h>
int main()
{
    int a[3][4] {{1,2,3,4},{5,6,7,9},{10,11,12,13}};
    int (*q)[4]=a;
     //重要 ::::: 這是把指針控制了行數(shù) 
    for(int i=0;i<3;i++)
    {
        for(int j=0;j<4;j++)
        {
            printf("%8d",*(*(q+i)+j));
            }   
            printf("\n");
    }
    
    return 0;
 } 

指針函數(shù)

#include<stdio.h>
int main(){
  int max(int x,int y);//聲明 
  int add(int x,int y);
  // 指向一個(gè)函數(shù)的指針
  int (*p)(int,int); //只能指向一個(gè)返回值為int類型,有兩個(gè)int參數(shù)的函數(shù) 
  p = max;//max表示函數(shù)在內(nèi)存的地址 
  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);
}

返回函數(shù)指針

#include<stdio.h>
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;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容