數據結構與算法(1)--指針複習

一、指針複習

地址就是內存單元的編號
從0開始的非負整數
範圍:0--FFFFFFFF[0-4G-1](地址線是32位,剛好控制2的32次)
指針:
指針就是地址 地址就是指針
指針變量是存放內存單元地址的變量
指針的本質是一個操作受限的非負整數(不能加乘除,只能加減)

指針分類:

1、基本類型的指針

#include<stdio.h>
void f(int * i){  //定義一個int *類型的指針變量i
        *i=100;   //i用來存放int類型變量的地址  
}
int main(){
	int i=10;
	f(&i);
	printf("i=%d",i);
	return 0;
}

2、指針和數組的關係

#include<stdio.h>
int i;
void f(int * p,int len){
	for(i=0;i<len;i++){
	*(p+i)=-1;  //等同於*(a+i)等同於a[i]     
}
}
int main(){
	int a[5]={0,1,2,3,4};
	f(a,3);
	printf("%d",0[a]);
	return 0;
}

3、指針和結構體的關係(C++中用類也能實現)
#include<stdio.h>
struct Student{
		int sid;
		char name[200];
		int age;
	};
void f(struct Student * p){
printf("p-> =%d,%s,%d \n",p->sid,p->name,p->age);
printf("*p=%d,%s,%d \n",(*p).sid,(*p).name,(*p).age);
}
int main(){
	struct Student st={1000,"zhangsan",18};
	printf("st=%d,%s,%d \n",st.sid,st.name,st.age);
	f(&st);
}

什麼叫結構體
結構體是用戶根據實際需要自己定義的複合數據類型

使用結構體的兩種方式:
1.struct Student st = {1000, "zhangsan", 20}
2.struct Student * pst = &st;

st.sid 等同於 pst->sid 等同於 (*pst).sid
pst所指向的結構體變量中的sid這個成員

注意事項:
結構體變量不能加減乘除,但可以相互賦值
普通結構體變量和結構體指針變量作爲函數參數的傳遞

4.動態內存分配

#include<stdio.h>
#include<malloc.h>
int main(){
	int i;
	int len=5;
	int * pArr=(int *)malloc(sizeof(int)*len);//malloc只需要一個參數,只能返回第一個字節的地址
	*pArr=0;
	*(pArr+1)=1;
	pArr[2]=2;
	*(pArr+3)=3;
	4[pArr]=4;
	for(i=0;i<5;i++){
	printf("%d\n",pArr[i]);
}
	free(pArr);     //把pArr所代表的動態分配的內存釋放
    return 0;
}

動態分配的內存,必須通過手動調用free()進行釋放,否則會發生內存泄露,內存越用越少


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章