1樓:徐玉蘭卿凰
1.如果是c語言。是不會出錯的。c不對陣列下標做強制檢查。
2.其實是一樣的。可以指向。
沒學指標之前學的下標法卻明確指出不能引用範圍之外的。這只是說會有危險。引用或修改陣列範圍之外的記憶體單元往往會出現一些問題(尤其是修改,因為那些記憶體單元可能存放著一些重要的資料)。
但是就語法而言,下標法是引用範圍之外的。這在語法上沒錯。只是很危險。
給您舉個例子。
#include
intmain()。。
2樓:慎美媛家午
請參考:
#include
const
intfun1(int
a,intb);
const
intfun2(int
a,intb);
typedef
const
int(*
fun)(int
a,int
b);//把
int返回值
兩個int引數的函式定義成fun函式指標型別intmain()
;//形式相同的函式指標陣列,方便函式的統一管理inttemp[2];
/*int
i;for(i=0;i<2;i++)
temp[i]=f[i](1,1);
*/temp[0]=f[0](3,6);
temp[1]=f[1](7,4);
printf("%d
%d\n",temp[0],temp[1]);
return0;}
「指向函式指標陣列的指標」怎麼使用
3樓:癌症新娘的婚禮
自定義乙個函式,返回指向char型別陣列的指標如下:
char* multmatrix( )
將這個函式放在程式中執行,如例項。
例項:#include
using namespace std;
char* multmatrix( )
{char*m = new char[4];
m[0]='a';
m[1]='b';
c++指向函式的指標陣列的定義和用法
4樓:練雅韶香蝶
int(*p)();這是函式指標,int
a(),這是函式,p=a或p=&a都行(這是乙個很神奇的地方),同理,指標陣列就是int
(*p)();
他的指向和前面一樣,你讓他指向乙個函式就行了,像其他陣列用法一樣,至於使用也是很神奇的,你可以用p(),也可以用(*p)()。
這些比較奇怪的問題你可以看那些比較有名的書籍,比如c和指標,或c專家程式設計之類的.
指標陣列的建立和用法
5樓:許詩文
建立:(1)宣告乙個陣列,宣告時用常量表示式指定陣列維數,然後可以用陣列名訪問陣列元素。
(2)宣告乙個變長陣列,宣告時用變數表示式指定陣列維數,然後用陣列名來訪問陣列元素。
(3)宣告乙個指標,呼叫malloc(),然後使用該指標來訪問陣列元素。malloc接受乙個引數:所需記憶體位元組數。
然後malloc()找到可用記憶體中乙個大小合適的塊。記憶體是匿名的;也就是說,malloc()分配了記憶體,但沒有為它指定名字。然而,它卻可以返回那塊記憶體第乙個位元組的位址。
因此,可以把那個位址賦值給乙個指標變數,並使用該指標來訪問那塊記憶體。因為char代表乙個位元組,所以傳統上曾將malloc()定義為指向char的指標型別。然而,ansi
c標準使用了乙個新型別:指向void的指標。這一型別被用作「通用指標」。
函式malloc()可用來返回陣列指標、結構指標等等,因此一般需要把返回值的型別指派為適當的型別。如果malloc()找不到所需的空間,它將返回空指標。我們使用malloc()來建立乙個陣列,可以在程式執行時使用malloc()請求乙個儲存塊,另外還需要乙個指標來存放該塊在記憶體中的位置。
例如,考慮以下**:
double * ptd;
ptd = (double
*)malloc(30*sizeof(double));
使用第二種或第三種方法可以做一些用普通的陣列宣告做不到的事;建立乙個動態陣列(dynamic
array),即乙個在程式執行時才分配記憶體並可在程式執行時選擇大小的陣列。例如,假定n是乙個整數變數。在c99之前,不能這樣做:
double item[n]; /*如果n是乙個變數,c99之前不允許這樣做*/
然而,即使在c99之前的編譯器中,也可以這樣做:
ptd=(double
*)malloc(n*sizeof(double));
變長陣列vla和malloc的用法有兩點區別。乙個區別在於vla是自動儲存的。自動儲存的結果之一就是vla所用記憶體空間在執行完定義部分之後會自動釋放。
因此不必使用free()。另一方面,使用由malloc()建立的陣列不必侷限在乙個函式中。例如,函式可以建立乙個陣列並返回指標,供呼叫該函式的函式訪問。
接著,後者可以在它結束時呼叫free()。free()可以使用不同於malloc()指標的指標變數;必須一致的是指標中儲存的位置。
用法://注意指標陣列和陣列指標分別是如何指向二維陣列的
#include
main()
; int (*p)[4];//陣列指標 p是指標,指向一維陣列,每個一維陣列有4個int元素*p是個陣列的位址,**p就是陣列元素了
int i,j;
int *q[3];//指標陣列 q是陣列,陣列元素是指標,3個int指標
p=m; //p是指標,可以直接指向二維陣列
printf("--陣列指標輸出元素--\n");
for(i=0;i<3;i++)
printf("\n");
}printf("\n");
for(i=0;i<3;i++,p++)//p可看成是行指標
printf("\n");
printf("--指標陣列輸出元素--\n");
for(i=0;i<3;i++)
q[i]=m[i];//q是陣列,元素q[i]是指標
for(i=0;i<3;i++)
printf("\n");
}printf("\n");
q[0]=m[0];
for(i=0;i<3;i++)
printf("\n");
}printf("\n");}
6樓:
你的意思應該是動態的二維陣列吧
//建立行指標
x = new int* [8];
//為每一行分配空間
for (int i =0;i<8;i++)x[i] = new int[8];
//為陣列輸入資料
int count = 0;
for(int m = 0;m<8;m++)for(int n = 0;n<8;n++)不知道你是我寫的這個意思不 要是不對的話 你可以再問我
7樓:
高中學的,現在都忘了
c語言 指標陣列的使用 200
8樓:一直很少提問的
int **a可以表達乙個二維陣列。為什麼呢?
你可以這麼理解 * p[3]表達的是乙個陣列指標,這個指標 p[0]表示的是陣列存的第乙個位址。而陣列實際上是一串連續位址的塊。每乙個小塊存著乙個內容。
每次訪問陣列時,你為什麼可以用陣列名+下標訪問呢? //比如a[i];
實際上就是 訪問*a+i; * 這個符號可以表示你存的是變數的位址。而陣列位址的第一位為int型別變數存的位址(你可以直接使用陣列的位址加上單位變數的空間的大小去訪問下個元素)。在這個程式中int *p[3] 表示可以存三個int 型別的位址。
而p正好把二維陣列的三個一維陣列的開頭的int型別變數的位址給存起來了。
給你舉個例子
我現在輸出的是位址,是不是連續的?
用*運算子獲取位址的內容。
實際上p[i]與 *(p+i)是表達的是同乙個意思。只不過只有陣列可以定義乙個連續的空間
(陣列的第乙個位址是隨機的其他的是連續的。)單獨用指標的話會隨機分配的
陣列的指標可以存三個位址。當然可以訪問二維陣列了。
9樓:首姍富察昊空
char
*name[4];是乙個指標陣列,每個成員name[i]都是乙個字元指標。
printf函式列印字串時傳的引數就是乙個字元指標。
所有printf("%s",
name[4]);
--針對你的問題
printf(「%d」,
name[4]);列印出來的是乙個字串的位址資訊。
printf("%d",
*name[4]);列印出來的是name[4]指標所指向的字元物件的值。
10樓:匿名使用者
p是指標陣列,每個指標指向了a的二維起始位址p[i]=a[i];這裡是賦值的位址,不是資料。p[0]就是a[0]位址,p[0][0]就是a[0][0]
指標陣列函式的用法
11樓:匿名使用者
應該這樣定義:const int ((*temp)(int a,int b)); 但是函式不能返回乙個陣列. 這樣也編不過.
12樓:匿名使用者
請參考:
#include
const int fun1(int a,int b); const int fun2(int a,int b); typedef const int (* fun)(int a,int b); //把 int 返回值 兩個int引數的函式定義成fun函式指標型別
int main()
; //形式相同的函式指標陣列,方便函式的統一管理int temp[2];
/*int i;
for(i=0;i<2;i++)
temp[i]=f[i](1,1);
*/temp[0]=f[0](3,6);
temp[1]=f[1](7,4);
printf("%d %d\n",temp[0],temp[1]);
return 0;}
指向二維陣列的指標做函式引數,定義乙個函式怎麼用二維陣列做引數?
更新一下 p可以這樣定義 int p 2 3 3 表明p是乙個長度為2的陣列,陣列裡面每個成員是指標,指標指向的成員是3 3二維陣列。fun可以這樣定義 void fun int p 3 3 但這種定義不容易看懂,一般是先定義成員,再定義陣列 typedef int element 3 3 type...
c 指標指向陣列的問題,c 如何讓指標指向字元陣列
你可以這樣寫short b 10 a 對乙個陣列取位址時,代表的是整個陣列整體,包括對 a做加1運算也是以陣列長度為單位,如 b a 1,實際b已經加了10個short長度而不是1個short 你去看一下陣列的基本資料了 陣列名的值是乙個指標常量,也就是陣列第乙個元素的位址 a的型別是short 1...
c語言中指標型函式和函式型指標的區別
指標函式,本質上是乙個函式,只是函式的返回值是乙個指標,比如int f 函式指標,本質上是乙個指標,只是指向的是乙個函式,比如int f 1 函式指標變數 在c語言中,乙個函式總是占用一段連續的記憶體區,而函式名就是該函式所佔記憶體區的首位址。我們可以把函式的這個首位址 或稱入口位址 賦予乙個指標變...
派生類指標指向基類物件,如何呼叫其成員函式
用 pb f 即可。類a中有了虛函式就會再類的資料成員的最前面新增乙個vfptr指標 void vfptr 這個指標用來指向乙個vtable表 乙個函式指標陣列 乙個類只有乙個該錶 該錶儲存著當前類的所有 虛函式 的位址。這樣vfptr就成為了乙個類似成員變數的存在。訪問虛函式的時候通過vfptr間...
函式引數為指標的問題
在我的編譯器中 new 後面不加 include include include include include using namespace std struct node int n int a 11000 char ch string s char name 100 int ji 1 int...