簡單的c語言指標概念問題高手來秒殺一下

時間 2022-02-05 13:30:05

1樓:8坤坤的小窩

語法上應該是錯的,因為&p是二級指標,無法賦給ptr這樣一個一級指標變數

如果強制轉換下應該沒錯,但是這麼寫編譯應該無法通過

2樓:匿名使用者

沒有錯啊,

但是int *p;這個不能這麼用

這個是沒有賦值的野指標,很危險的,呵呵

在執行的時候,程式申請一塊空間給這個程式的所有變數,慢*p所佔有的那個記憶體空間是有資料的(這個是肯定的,都是0也是資料)。那麼這個資料所指向的空間就不知道是指向**了

我是說沒錯,但是危險

萬一這個指向的空間是系統的記憶體空間,要是改寫指向空間的內容,那麼也就是改寫系統所佔空間的內容。系統可能崩潰,呵呵

所有在講指標的時候,這裡是著重強調的,在定義指標的時候,一定要賦值

3樓:匿名使用者

邏輯上和語法上都沒錯,int *是一個int型資料,其內部資料型別為一個int型資料的地址。而&p是這個地址的地址,應該是沒問題的,這個**可以這樣理解:

int a;

int *p = &a;

int * ptr = &&a;

不知道說清楚了沒

4樓:

邏輯上為什麼是錯的呢?

指標是一個儲存地址的東西,那它本身肯定上也儲存在一個地址當中啊

所以你這個不僅語法沒錯,邏輯上就要看你想怎麼理解了,如果你非認為它錯了,那就錯了吧呵呵

5樓:

語法上錯了,兩個是不同型別的變數。

&p 相當於int** 不能賦值給int*型別的除非加上強轉。

6樓:

都沒錯啊,雖然p是個指標,但是p也是有地址的,ptr儲存的就是指標p的地址...不知道這麼說你懂否?

7樓:2六道

語法錯誤,&p在的型別為int **, 而定義為int * 在編譯是會提示不能轉換

c語言指標問題,高手來,有分,真心看不懂啊!!!

8樓:

的確應該是5行4列的陣列,但輸入格式怎樣就不用管了,就算輸入的那20個數全打在同一行,執行結果也是一樣的。

因為int [m][n],所以a[0]地址開始存了m*n個數,a[0]+m*n就是第一個越界的地址,p必須小於它才有意義,否則越界了。

9樓:dk小黑

(1)輸入時只要以空格分隔20個數字就行了,分成幾行無所謂;(2)因為陣列名錶示該陣列首個元素的地址,而a[m][n]是二維陣列,所以a[0]表示的是第一行的第一個元素的地址,再加上m*n(元素總個數),就是陣列最後一個元素的下一個元素,即a[m-1][n]。因此,p

10樓:匿名使用者

建議你先了解指標吧!先把地址先列印出來(譚浩強的書上有!)通過這個來了解一下什麼是指標,然後再搞陣列吧!陣列尤其是二維陣列畢竟是通過指標組成的一個表嗎!

c語言指標問題,跪求高手解決一下,下列定義的含義

11樓:

首先在你的前 7 個裡面加入一個:

1. int *p[3];

2. int (*p)[3];

+. int p(int);

3. int *p(int);

4. int (*p)(int);

5. int *(*p)(int);

6. int (*p[3])(int);

7. int *(*p[3])(int);

把型別的 * 放在前面,將陣列名/函式名加上括號,重新編號:

1. int* (p)[3];

2. int (*p)[3];

3. int (p)(int);

4. int* (p)(int);

5. int (*p)(int);

6. int* (*p)(int);

7. int (*p[3])(int);

8. int* (*p[3])(int);

可見:1、2 宣告的是陣列,括號中代表陣列名。

1 宣告瞭名為 p 的陣列,括號前面代表陣列成員型別為 int *,即儲存3個指標的陣列。

2 宣告瞭名為 *p 的陣列,括號前面代表陣列成員型別為 int,即儲存3個 int。*p 表示這樣的陣列,p 自然就是指向這麼一個陣列的指標。

3、4、5、6、7、8 宣告的是函式,括號中帶代表函式名。

3 宣告瞭引數為一個 int,返回值為 int 的函式名 p。

4 宣告瞭引數為一個 int,返回值為 int * 的函式名 p。

5 宣告瞭引數為一個 int,返回值為 int 的函式名 *p。*p 等同於3中宣告的函式名,這裡的 p 自然就是指向3中所宣告函式的指標。

6 宣告瞭引數為一個 int,返回值為 int * 的函式名 *p。*p 等同於4中宣告的函式名,這裡的 p 自然就是指向4中所宣告函式的指標。

7 宣告瞭名為 p 的指標陣列,其中包含3個5中所宣告的函式指標型別(括號前面 int 代表該陣列元素內的函式指標所指向函式的返回值型別,與陣列無關)。

8 宣告瞭名為 p 的指標陣列,其中包含3個6中所宣告的函式指標型別(同上)。

用漢字寫出來就是這麼回事:

int 函式1(int); // 這是函式1宣告,引數為 int,返回值為 int。

int* 函式2(int); // 這是函式2宣告,引數為 int,返回值為 int *。

int (*指向函式1的指標)(int);

int* (*指向函式2的指標)(int);

int (*指向函式1的指標構成的指標陣列[5])(int);

int* (*指向函式2的指標構成的指標陣列[5])(int);

函式1和函式2的區別就是返回值不同,其他都一樣。

最後一個 void *p; 表示任意型別的指標,該型別可直接賦任何指標型別值無需任何轉換。

char ch = 'a';

int i = 0;

double f = 3.14;

long *pl = (long *)&i;

void *p;

p = &ch;

p = &i;

p = &f;

p = pl;

以上用法均正確,無需強制型別轉換。

12樓:

(1)int *p[3]; // p是個陣列,元素是指向整數的指標(int*) ,長度是3

(2)int (*p)[3]; // p是個指標,型別是int(*)[3];指向由3個整陣列成的一維陣列,可用一個第二維是3的二維陣列的地址給它賦值

(3)int *p(int); // p是個函式,有一個int型別的引數,返回一個int*

(4)int (*p)(int); // p 是個函式指標,該指標可指向有一個int引數,返回int的函式

(5)int *(*p)(int); // p是個函式指標,該指標可指向有一個int引數,返回int*的函式

(6)int (*p[3])(int); // p是個陣列,有三個元素,元素型別是指向有一個int引數,返回int的函式指標,

(7)int *(*p[3])(int); // p是個陣列,有三個元素,元素型別是指向有一個int引數,返回int*的函式指標,

(8)void *p; // p是個void型別的指標 ,一般用來表示絕對地址,可指向任何物件

13樓:o丨

1. *p[3] 一個有3個元素的int型指標

2. 一個具有n行3列的陣列 *p是第一行第一列 相當於 p[3]

3. 定義一個函式,返回值為int型指標

4. 一個具有一個int型引數的返回int的函式的指標

5. p是返回int型函式的一個帶int 型引數返回int指標的函式的指標

6. 一個指向3個元素的int型指標,每個元素是一個具有一個int型引數的函式的地址

7. 返回值為int型指標的一個函式,擁有一個(6)的指標。

8. 無型別指標,可以指向任何物件,用的時候需要用(型別名*)來強制轉換

14樓:沫沫魚在吉林

(1)定義了一個一維指標陣列p,他的每一個分量分別指向一個int型整數;

(2)定義了一個二級指標變數p,他是用來指向二維陣列的,(*p)[3];中的3是它所指向的陣列的列數,例如:int a[4][3],(*p)[3]; p=a;這樣我們就可以通過p對a陣列進行操作了,如:**p,*(*(p+1)+1);

(3)p是int型指標的函式,其有一個形參為int形;

(4)定義了一個指向函式的指標變數p,p所指向的函式返回值是int型,形參為int型;

(5)定義了一個指向函式的指標變數p,p所指向的函式返回值是int型指標,形參為int型;

(6)定義了一個指向函式的指標陣列p,p中每一個元素都可指向一個返回值為int型,引數為int型的函式;

(7)(6)定義了一個指向函式的指標陣列p,p中每一個元素都可指向一個返回值為int型指標,引數為int型的函式;

(8)p是個空型別指標,平可指向任何型別的物件。

一道簡單c語言指標問題程式設計題!麻煩高手幫我改的簡單容易理解,英文單詞別很多還難!麻煩了

15樓:匿名使用者

#include

#include

#define n 40

void main()

puts(a); //修改}

16樓:匿名使用者

回答1:size_t strlen(const char *s); //函式原型

strlen()函式的功能:從指標s所指向的字串的首個字元開始判斷專,依次向後移動一屬個位元組,判斷當前字元的asci碼值大於0,計數值加1,當判斷當前字元的ascii碼值是0就結束,並返回計數值(即字串的長度)。

回答2:在c編譯器裡,陣列a[n]定義後沒有初始化,則陣列a[n]對應的記憶體空間裡全是垃圾資料,所以此時strlen(a)的返回值是不確定的。

如果**是:

q = a + strlen(a) - 1;//由於strlen(a)的返回值不確定,q儲存的就不是字串a的最後一個有效元素的地址,可想後面的交換排序也就實現不了字串的交換。

gets(a);

如果**是:

gets(a);

q = a + strlen(a) - 1;//當你輸入n(n

一個c語言指標問題,指標型別強制轉換,求高手分析! 30

17樓:

是這樣的,c語言中,32-bit系統int和float雖然都佔4個位元組,

但是他們在記憶體中的儲存方式是不一樣的。

int型的3在記憶體中32-bit 16進位制是0x00000003

float型的3在記憶體中32-bit 16進位制是0x40400000

當你把指標v(原本指向int型)強制轉換指向float型時,

取值是根據float型方式去取值,所以是以float的記憶體儲存方式解釋,

所以pi在記憶體的值即3以float型解釋的話就變成:

1.000 0000 0000 0000 0000 0011e-127.

再取整的話顯然是0. 所以輸入結果變成了0.

float在記憶體中的儲存方式可以參考:

希望對你有幫助。

c語言概念問題 有深入瞭解的高手來

這樣理解 1 定義陣列時,陣列的長度或者說陣列的大小是用整型常量或者常量表示式 比如 int array 10 或者 define size 10 int array size 都是可以的 但是 int m 5 int array m 5 是錯誤的 2 而對陣列元素進行引用時,陣列下標可以是常量或者...

C語言指標的概念,它例子具體點,c語言指標的概念

要明白指標的概念,首先得明白程式中的變數在記憶體地址空間中如何存放。記憶體地址空間以位元組為單位,包括程式的 段 資料段 堆還有棧。一個變數有兩個屬性 變數型別和變數名。通過變數名我們可以找到該變數的第一個位元組在地址空間記憶體放的位置 即記憶體地址 通過變數屬性 即變數型別 我們知道該變數總共佔用...

關於C語言指標問題,C語言指標的賦值問題

飛翔的蠍子大叔 關於int p1 123這個問題我看了很多資料,在這裡我發表一點看法,該問題非常好,這是c語言需要規範的地方。int p1 123 是非法操作,指標表示地址,地址 123?我是沒有見過這種操作。地址一般用二進位制 八進位制 十六進位制表示,123表示地址根本就是扯淡!這個語句的目的就...