真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

c語言指針函數(shù)數(shù)組結(jié)構(gòu) c語言指針數(shù)組

在C語言中,一個結(jié)構(gòu)體數(shù)組,成員的指針函數(shù)。怎樣對這個指針賦值?

定義一個函數(shù):

創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供烏海海南網(wǎng)站建設(shè)、烏海海南做網(wǎng)站、烏海海南網(wǎng)站設(shè)計、烏海海南網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、烏海海南企業(yè)網(wǎng)站模板建站服務(wù),10年烏海海南做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。

void f(void *d)

{

}

{ReadData,0,0,f}。

c語言中數(shù)組指針和結(jié)構(gòu)體指針問題

樓上都說的很不錯。針對補(bǔ)充,我說兩句

結(jié)構(gòu)體名字不是指針,結(jié)構(gòu)體數(shù)組的名字才是指針

就好像int x;.....x不是指針,int x[2].....x是常量指針

同樣 struct aa{};...aa x;...x不是指針,aa x[3]....x是常量指針

------------------------------------------------------

對于數(shù)組int a[2]={25,32},我們通常把a(bǔ)看成是指針

但實(shí)際上,這個指針并不存在的,a代表這個數(shù)組的首地址,只有才參與表達(dá)式運(yùn)算時,才暫時轉(zhuǎn)化為常量指針(不可更改)

所以

a,取出的這個實(shí)際不存在的指針的地址,同數(shù)組第一個元素的地址是一樣的

---------------------------------------------------

換個例子,如果你這么定義

int a[3],*p=a;

printf("%d",p);........就是p的自身地址,類似你上面的xxxx

printf("%d",p);..........就是數(shù)組a的首地址,類似你上面的yyyy

---------------------------------------------------

總結(jié)

你定義一個普通指針p的話,p和p是不同的

你定義一個數(shù)組a的話,a和a是相同的,因為C中只是把a(bǔ)看做常量指針,而不是實(shí)際存在的

c語言 指針怎么指向一個結(jié)構(gòu)數(shù)組?

樓上都回答得這么復(fù)雜嗎?我寫簡單一點(diǎn)的

struct str{

int n;

int s;

};

void main()

{struct str a[2]={1,2,3,4};//聲明一個結(jié)構(gòu)數(shù)組并對數(shù)組a[0]中的成員n和s

分別賦值為1和2,對a[1]中的成員設(shè)置為3和4。

注:有些編譯器可能不需要最前面的struct來聲明

結(jié)構(gòu)對象。

struct str *p=a; //聲明一個結(jié)構(gòu)指針,并把結(jié)構(gòu)數(shù)組的地址賦給該指針

printf("%d",p-n); //訪問結(jié)構(gòu)數(shù)組對象a[0]中的變量n的值,也就是1

printf("%d",(p+1)n); //訪問結(jié)構(gòu)數(shù)組對象a[1]中的變量n的值,也就是3。因為指針p+1就指向了結(jié)構(gòu)數(shù)結(jié)a的下一個位置,也就是a[1]處。

}

C語言:簡述一下“數(shù)組和指針的關(guān)系”?

一、概念

數(shù)組:數(shù)組是用于儲存多個相同類型數(shù)據(jù)的集合。

指針:指針相當(dāng)于一個變量,但是它和不同變量不一樣,它存放的是其它變量在內(nèi)存中的地址。

二、賦值、存儲方式、求sizeof、初始化等

1.賦值

同類型指針變量可以相互賦值,數(shù)組不行,只能一個一個元素的賦值或拷貝

2.存儲方式

數(shù)組:數(shù)組在內(nèi)存中是連續(xù)存放的,開辟一塊連續(xù)的內(nèi)存空間。數(shù)組是根據(jù)數(shù)組的下進(jìn)行訪問的,多維數(shù)組在內(nèi)存中是按照一維數(shù)組存儲的,只是在邏輯上是多維的。

數(shù)組的存儲空間,不是在靜態(tài)區(qū)就是在棧上。

指針:指針很靈活,它可以指向任意類型的數(shù)據(jù)。指針的類型說明了它所指向地址空間的內(nèi)存。

指針:由于指針本身就是一個變量,再加上它所存放的也是變量,所以指針的存儲空間不能確定。

3.求sizeof

數(shù)組:

數(shù)組所占存儲空間的內(nèi)存:sizeof(數(shù)組名)

數(shù)組的大?。簊izeof(數(shù)組名)/sizeof(數(shù)據(jù)類型)

指針:

在32位平臺下,無論指針的類型是什么,sizeof(指針名)都是4,在64位平臺下,無論指針的類型是什么,sizeof(指針名)都是8。

關(guān)于指針和數(shù)組求sizeof,我在之前的博客中寫過,現(xiàn)將連接貼上:

4.初始化

數(shù)組:

(1)char a[]={"Hello"};//按字符串初始化,大小為6.(2)char b[]={'H','e','l','l'};//按字符初始化(錯誤,輸出時將會亂碼,沒有結(jié)束符)(3)char c[]={'H','e','l','l','o','\0'};//按字符初始化1234

這里補(bǔ)充一個大家的誤區(qū),就是關(guān)于數(shù)組的創(chuàng)建和銷毀,尤其是多維數(shù)組的創(chuàng)建與銷毀。

(1)一維數(shù)組:

int* arr = new int[n];//創(chuàng)建一維數(shù)組

delete[] arr;//銷毀

(2)二維數(shù)組:

int** arr = new int*[row];//這樣相當(dāng)于創(chuàng)建了數(shù)組有多少行

for(int i=0;irow;i++)

{

arr[i] = new int[col];//到這里才算創(chuàng)建好了

}

//釋放

for(int i=0;irow;i++)

{

delete[] arr[i];

}

delete[] arr;

指針:

//(1)指向?qū)ο蟮闹羔槪海?)里面的值是初始化值)int *p=new int(0) ; ? ?delete p;//(2)指向數(shù)組的指針:(n表示數(shù)組的大小,值不必再編譯時確定,可以在運(yùn)行時確定)int *p=new int[n]; ? ?delete[] p;//(3)指向類的指針:(若構(gòu)造函數(shù)有參數(shù),則new Class后面有參數(shù),否則調(diào)用默認(rèn)構(gòu)造函數(shù),delete調(diào)用析構(gòu)函數(shù))Class *p=new Class; ?delete p;//(4)指針的指針:(二級指針)int **pp=new (int*)[1];

pp[0]=new int[6];delete[] pp[0];12345678910

這里我們區(qū)分兩個重要的概念:指針數(shù)組、數(shù)組指針。

(1)指針數(shù)組:它實(shí)際上是一個數(shù)組,數(shù)組的每個元素存放的是一個指針類型的元素。

int* arr[8];//優(yōu)先級問題:[]的優(yōu)先級比*高//說明arr是一個數(shù)組,而int*是數(shù)組里面的內(nèi)容//這句話的意思就是:arr是一個含有8和int*的數(shù)組1234

請點(diǎn)擊輸入圖片描述

(2)數(shù)組指針:它實(shí)際上是一個指針,該指針指向一個數(shù)組。

int (*arr)[8];//由于[]的優(yōu)先級比*高,因此在寫數(shù)組指針的時候必須將*arr用括號括起來//arr先和*結(jié)合,說明p是一個指針變量//這句話的意思就是:指針arr指向一個大小為8個整型的數(shù)組。1234

請點(diǎn)擊輸入圖片描述

三、傳參

數(shù)組:

數(shù)組傳參時,會退化為指針,所以我們先來看看什么是退化!

(1)退化的意義:C語言只會以值拷貝的方式傳遞參數(shù),參數(shù)傳遞時,如果只拷貝整個數(shù)組,效率會大大降低,并且在參數(shù)位于棧上,太大的數(shù)組拷貝將會導(dǎo)致棧溢出。

(2)因此,C語言將數(shù)組的傳參進(jìn)行了退化。將整個數(shù)組拷貝一份傳入函數(shù)時,將數(shù)組名看做常量指針,傳數(shù)組首元素的地址。

1.一維數(shù)組的傳參

#include stdio.h//傳參方式正確//用數(shù)組的形式傳遞參數(shù),不需要指定參數(shù)的大小,因為在一維數(shù)組傳參時,形參不會真實(shí)的創(chuàng)建數(shù)組,傳的只是數(shù)組首元素的地址。(如果是變量的值傳遞,那么形參就是實(shí)參的一份拷貝)void test(int arr[])

{}//傳參方式正確//不傳參數(shù)可以,傳遞參數(shù)當(dāng)然也可以void test(int arr[10])

{}//傳參方式正確//一維數(shù)組傳參退化,用指針進(jìn)行接收,傳的是數(shù)組首元素的地址void test(int *arr)

{}//傳參方式正確//*arr[20]是指針數(shù)組,傳過去的是數(shù)組名void test2(int *arr[20])

{}//傳參方式正確//傳過去是指針數(shù)組的數(shù)組名,代表首元素地址,首元素是個指針向數(shù)組的指針,再取地址,就表示二級指針,用二級指針接收void test2(int **arr)

{}int main()

{int arr[10] = {0};int *arr2[20] = {0};

test(arr);

test2(arr2);

}

2.二維數(shù)組的傳參

//傳參正確//表明二維數(shù)組的大小,三行五列void test(int arr[3][5])

{}//傳參不正確//二維數(shù)組的兩個方括號,不能全部為空,也不能第二個為空,只能第一個為空void test(int arr[][])

{}//傳參正確//可以寫成如下這樣傳參形式,但是不能寫int arr[3][]void test(int arr[][5])

{}//傳參不正確//arr是一級指針,可以傳給二維數(shù)組,但是不能正確讀取void test(int *arr)

{}//傳參不正確//這里的形參是指針數(shù)組,是一維的,可以傳參,但是讀取的數(shù)據(jù)不正確void test(int* arr[5])

{}//傳參正確//傳過去的是二維數(shù)組的數(shù)組名,即數(shù)組首元素的地址,也就是第一行的地址,第一行也是個數(shù)組,用一個數(shù)組指針接收void test(int (*arr)[5])

{}//傳參不正確//可以傳參,但是在讀取的時候會有級別不同的問題void test(int **arr)

{}int main()

{int arr[3][5] = {0};

test(arr);

}

指針:

1.一級指針傳參

當(dāng)函數(shù)參數(shù)部分是一級指針時,可以接受什么參數(shù)例如:test(int*p)

(1)可以是一個整形指針

(2)可以是整型變量地址

(3)可以是一維整型數(shù)組數(shù)組名

#include stdio.hvoid print(int *p, int sz)

{int i = 0;for(i=0; isz; i++)

{printf("%d\n", *(p+i));

}

}int main()

{int arr[10] = {1,2,3,4,5,6,7,8,9};int *p = arr;int sz = sizeof(arr)/sizeof(arr[0]);//一級指針p,傳給函數(shù)print(p, sz);return 0;

}

2.二級指針傳參

即當(dāng)函數(shù)參數(shù)部分是二級指針時,可以接受什么參數(shù)例如:test(int**p)

(1)二級指針變量

(2)一級指針變量地址

(3)一維指針數(shù)組的數(shù)組名

#include stdio.hvoid test(int** ptr)

{printf("num = %d\n", **ptr);

}int main()

{int num = 10;int*p = num;int **pp = p;

test(pp);

test(p);return 0;

}

四、函數(shù)指針、函數(shù)指針數(shù)組、函數(shù)指針數(shù)組的指針

1.函數(shù)指針

void test()

{printf("hehe\n");

}//pfun能存放test函數(shù)的地址void (*pfun)();

函數(shù)指針的形式:類型(*)( ),例如:int (*p)( ).它可以存放函數(shù)的地址,在平時的應(yīng)用中也很常見。

2.函數(shù)指針數(shù)組

形式:例如int (*p[10])( );

因為p先和[ ]結(jié)合,說明p是數(shù)組,數(shù)組的內(nèi)容是一個int (*)( )類型的指針

函數(shù)指針數(shù)組在轉(zhuǎn)換表中應(yīng)用廣泛

3.函數(shù)指針數(shù)組的指針

指向函數(shù)指針數(shù)組的一個指針,也就是說,指針指向一個數(shù)組,數(shù)組的元素都是函數(shù)指針

void test(const char* str)

{printf("%s\n", str);

}int main()

{//函數(shù)指針pfunvoid (*pfun)(const char*) = test;//函數(shù)指針的數(shù)組pfunArrvoid (*pfunArr[5])(const char* str);

pfunArr[0] = test;//指向函數(shù)指針數(shù)組pfunArr的指針ppfunArrvoid (*(*ppfunArr)[10])(const char*) = pfunArr;return 0;

}


文章題目:c語言指針函數(shù)數(shù)組結(jié)構(gòu) c語言指針數(shù)組
文章鏈接:http://weahome.cn/article/dopjjsc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部