面試題 指標

2021-06-20 16:08:56 字數 1371 閱讀 8235

一、指標

1、利用指標實現兩數交換:

#include using namespace std;

void swap1(int p,int q)

void swap2(int *p,int *q)

void swap3(int *p,int *q)

void swap4(int *p,int *q)

void swap5(int &p,int &q)

int main()

int main()

int main()

int main()

int main()

int main()

int main();

int main(){

s s;

int *p=&s.i;

p[0]=4;

p[1]=3;

s.p=p;

s.p[1]=1;

s.p[0]=2;

//cout<

p指標指向s.i的位址,p[0]=4,p[1]=3,所以此時s.i為4,s.p為3(位址為3)

s.p=p,即s.p=&s.i,s.p[1]也就是s.p,是同乙個地方,此時s.p位址為1

最後,s.p[0],因為s.p位址變了,所以就不是s.i了,相當於*((int *)1)=2;訪問的是0x00000001的空間——對乙個未做宣告的位址進行訪問,訪問出錯

二、函式指標

1、寫出函式指標、函式返回指標、const指標、指向const指標、指向const的const指標

void (*f)()

void * f()

const int*

int * const

const int* const

2、下面的資料宣告都代表什麼?

float(**def)[10];//def是乙個二級指標,它指向的是乙個一維陣列的指標,陣列元素都是float

double*(*gh)[10];//gh是乙個指標,它指向乙個一維陣列,陣列元素都是double*

double(*f[10])();//f是乙個陣列,有10個元素,元素都是函式的指標,指向的函式型別是沒有引數且返回double的函式

int*((*b)[10]);//就跟int*(*b)[10]是一樣的,是一維陣列的指標

long(*fun)(int);//函式指標,引數int返回值long

int(*(*f)(int,int))(int);//f是乙個函式的指標,指向的函式型別是兩個int引數且返回乙個函式指標的函式,返回的函式指標指向乙個有乙個int引數且返回int的函式

面試題 關於指標

面試題 下列c 程式會在哪一行崩潰?struct s main 分析 int p s.i時,一直到p 0 4,p 1 3的時候,p始終等於 s.i。s.p p 建立了如下的關係 s.p存了p的值,也即 s.i,s.p 1 相當於 s.i 1 即s.i的位址加1.也就是s.p.s.p 1 和s.p其實...

面試題 指標 引用

返回目錄 問題 問 引用與指標有什麼區別?答 1.引用必須初始化,指標可以不用。2.引用初始化以後就不能被改變 即只能初始化一次,始終只指向指定的物件 而指標可以改變所指向的物件。3.不存在指向空值的引用,而指標可以指向乙個空值,即空指標。4.因為引用不能指向空值,這意味著使用引用之前不需要測試其合...

面試題 指標 void 通用指標

返回目錄 問題 問 函式中的void和指標中的void 有什麼區別?答 在函式中的void是表示無型別或無返回型別。void指標是通用指標,用來存放任何資料型別的引用。分析 void真正發揮的作用在於 1.對函式返回的限定。2.對函式引數的限定。函式返回值 函式名 引數1,引數2,引數3,int s...