天天看點

C語言-指針數組月數組指針,結構體數組,結構體指針,結構體指針數組

指針數組

指針數組是一個數組,數組的元素儲存的是指針;

定義:

int *p[size] //表示數組存的是指針,有size個指針資料

數組指針

數組指針是一個指針,該指針指向的是一個數組;

定義:

int (*p)[size] //數組指針,存儲size個int類型的資料

指針函數與函數指針

指針函數

指針函數是一個函數,該函數傳回的是一個指針;

函數指針

函數指針是一個指針,該指針指向一個函數;

#include <stdio.h>
 
int* getIntPoint(const int a) //指針函數,是一個函數 傳回一個指針;
{
	int *p = nullptr ;
	p = new int ;
	*p = a; 
 	return p ;
}
 
 
int main(int argc, char const *argv[])
{
	int *(*p)(int)  = getIntPoint ; //函數指針,該指針指向一個函數;
	int* pInt = p(5); //使用函數指針;
	printf("%d\n",*pInt);
	delete pInt ;
	return 0;
}
           
#include <stdio.h>
void print();
int main(void)
{
	void (*fuc)(); 
	fuc = print ; 
	fuc(); 	
} 
void print()
{
	printf("hello world!\n");
}
           

回調函數

函數指針變量可以作為某個函數的參數來使用的,回調函數就是一個通過函數指針調用的函數。

#include <stdlib.h>  
#include <stdio.h>
 
// 回調函數
void populate_array(int *array, size_t arraySize, int (*getNextValue)(void))
{
    for (size_t i=0; i<arraySize; i++)
        array[i] = getNextValue();
}
 
// 擷取随機值
int getNextRandomValue(void)
{
    return rand();
}
 
int main(void)
{
    int myarray[10];
    populate_array(myarray, 10, getNextRandomValue);
    for(int i = 0; i < 10; i++) {
        printf("%d ", myarray[i]);
    }
    printf("\n");
    return 0;
}
           

結構體數組

數組中存儲的元素都是一個結構體,類似整型數組中存儲的是int型。

申明結構體數組:

結構體名 數組名【size】

結構體指針

指向結構體的指針。

結構指針變量說明的一般形式為:

struct 結構體名 *結構體指針變量名

struct student *p = &Boy; //假設事先定義了 struct student Boy;

#include<stdio.h>
#include<string.h>
#include<malloc.h>

typedef struct Errlog
{
	char str_file[1000];
	int num;
	int err;
}errlog;

int main(void)
{
	errlog err1[3];//結構體數組
	errlog *err2;//結構體指針
	errlog *err3[3];//結構體指針數組,表示數組存的是指針,有3個指針資料
	errlog (*err4)[3];//結構體數組指針,是一個指針,該指針指向的是一個數組,該數組存儲3個errlog類型的資料

}

           

了解:結構體數組指針就是一個指針,感覺沒有實際意義,可用普通指針代替。

繼續閱讀