指標 陣列 字串 結構體之間的聯絡

2021-07-30 03:41:46 字數 3382 閱讀 9868

//1、指標操作變數

int *p;//定義乙個整形指標 p代表的是位址,*p代表的是位址指向的值

int a=10;

p=&a;//將a的位址賦值給p指標

*pa=20;//通過指標改變變數a的值

a=20;//也可以通過變數改變*p的值

//2、指標運算元組

int i,b=30,a=;//0<= i int *p=a;//陣列名代表陣列的首位址

*(a+i)等價於a[i]等價於p[i]等價於*(p+i);//而*(a+i)錯誤

//3、指標操作字串

注釋:在下面字串部分

//4、const修飾指標

int * const pa=a;//宣告指標常量,pa的位址為常量,但可以*pa=20;

const

int * pi與int

const * pi一樣;//const修飾的都是*pi,但可以pi=&b;

int * const pi與int * const pi同理;

const

int * const pi=&b;//任何方式都不可改變

//注意:符號常量的位址不能通過任何方式賦值給指標變數,否則就可修改符號常量的值 如:int const s=10;int * ab=(int *)&s;const int * pi=&s;都是錯誤的

//4、指標函式呼叫【其實函式名就是指標】

void find2(char array, char search, char ** ppa);//如果要通過形參改變實參的值,需要使用指標

//函式指標變數的申明

void (*funp)(int);//也可寫成void (*funp)(int x);

funp=&myfun;  //將myfun函式的位址賦給funp變數

funp=myfun;  //將myfun函式的位址賦給funp變數

(*funp)(20); //這是通過函式指標變數funp來呼叫myfun函式

funp(20);  //這是通過函式指 針變數來呼叫myfun函式的。

//總結:myfun 函式名是乙個函式指標常量,而funp是乙個函式數指標變數,這是它們的關係。

typedef

void (*funtype)(int );//這樣只是定義乙個函式指標型別

typedef

void (*funtype)(int ); //②. 定義乙個函式指標型別funtype,與①函 數型別一至

void callmyfun(funtype fp,int x);

注釋:(1)陣列名代表陣列的首位址,a=&a[0];(2)int a[100],在記憶體中占用100×4=400位元組空間;(3)a=&a[0]=&a.三者僅在數值上是相等的(4)陣列方括號中不可用變數來表示元素的個數,但是可以是符號常數或常量表示式。如:int n=5;int a[n];錯誤

(5)static表示是靜態儲存型別, c語言規定只有靜態儲存陣列和外部儲存陣列才可作初始化賦值。 如: static int a[10]=;

(6)當中值的個數少於元素個數時,只給前面部分元素賦值。而後面的元素自動賦0值

//1、基本型別的陣列

int a[10]; 說明整型陣列a,有10個元素。

float b[10]; 說明實型陣列b,有10個元素。

char ch[20]; 說明字元陣列ch,有20個元素。

static

int d=;

int s[5]=;

//2、指標變數在陣列中的應用

char c[10];

char *p=c; //將陣列首位址賦值給指標

*(p+n)==c[n];//指標的值等於陣列的值

p[i]=*(p+i)=a[i]=*(a+i);//指標訪問陣列

&p[i]=(p+i)=(a+i)=&a[0]+i;//獲取位址

//3、陣列存放字串

static

char c="basic/ndbase";//存放字串

注釋:c語言沒有單獨的字串型別,可通過陣列和指標存放

//1、陣列

char c="basic/ndbase";//存放字串,雙引號,可下標訪問

char a[10];

gets(a);//通過gets獲取字串到陣列,陣列元素為單個字元,可下標訪問

//2、指標

char *array;//僅宣告了乙個陣列僅分配1kb記憶體,未指向合法位址

scanf("%s",array);//錯誤的 array為野指標,未指向合法位址

char *pointer="123456";//指標指向字串存放的記憶體位址

printf("%s",pointer);//也可以pointer[i]

//1、定義

struct student //結構體型別的說明與定義分開。 宣告

typevarlist;//可跟型別變數列表

//2、定義型別變數

struct student stu1,stu2;//(1)定義型別變數標準方式

typevarlist;//(2)結構體末尾可加多個型別變數

struct{}type;//(3)不定義型別名直接定義變數

//3、結構體型別的初始化

struct student a=; //(1)定義的同時賦值

struct stutypevar=;//(2)直接在賦值

stu1.age=12;//(3)使用點語法

printf("年齡:%d \n", a.age);

//4、結構體指標

struct student stu1;

struct student *p;

p=&stu1;//這是必要的

(*p).age;//賦值1

p->***='男';//賦值2

//5、定義結構體陣列

struct student stu[3]=,,};//陣列裡包含3個結構體型別變數

//6、結構體的引用

(1)stu1.name//結構體變數.成員名

(2)(*p).age;//(*p).成員名

(3)p->***='男';//p->成員名

C 陣列 字串 指標之間聯絡詳解

1 定義 儲存多個同型別的值。int a 5 是int陣列,而不是陣列 5 整型常數 const值 變數 常量表示式 const int n 5 char a n cout a 2 初始化 定義陣列時,才能初始化。兩種方式 列表 對於字串可以不用 下標賦值 列表 int a 10 字元 char a...

指標和字串之間的聯絡

c語言中沒有string基本資料型別 c語言裡有這個標頭檔案,所以就想當然的認為c語言裡有string這個型別,通過下面這種形式來宣告string的變數string astring 編譯失敗。原來c語言裡壓根就沒有string這個型別,所以字串都是通過char陣列來儲存的,而這個標頭檔案裡宣告的函式...

指標和字串之間的聯絡

紅塵 網 wap.zuxs.net c語言中沒有string基本資料型別 c語言裡有這個標頭檔案,所以就想當然的認為c語言裡有string這個型別,通過下面這種形式來宣告string的變數string astring 編譯失敗。原來c語言裡壓根就沒有string這個型別,所以字串都是通過char陣列...