C語言指標,問題啊,初學啊,C語言指標問題(初學者)

2022-08-17 13:25:05 字數 5420 閱讀 9814

1樓:悟悌

j = c這一句是錯誤的,j是int *型別的變數,只能儲存int型變數的位址值,應該改為j = &c才對。

%p是位址符格式。這樣輸出的是c的記憶體位址。

想要通過j輸出c的值,應該這樣寫printf("%d",*j);

*j儲存的才是c的值,j儲存的是c的位址。

所以1 3 都應該改為 *j

2樓:昕日會更好

%p是輸出位址符格式,j是指向變數c的指標,%p,j輸出的是j的值,也就是c的位址,因為j的值就是c的位址,如果你想輸出c的位址,就用%p,j,因為j的值就是c的位址,你要記住,指標也是乙個變數,不過變數的值是位址罷了,1,3和最後乙個格式輸出都錯!

3樓:

再看看下面的**,執行一下就可以體會了。

#include

int main()

程式中j 是乙個指向整型資料的指標變數,指標的值必須是位址。

要想通過指標j訪問變數c,可以使用這條語句j = &c;

用取位址運算子把變數c的位址賦給指標變數j,然後就可通過j訪問變數i啦!

指標很重要的,可是c語言的精髓呀,很用挑戰性的。

c語言指標問題(初學者)

4樓:

1.概念問題:指標是指存放位址值的變數或常量;指標與一般變數或常量的區別,在於它不直接儲存數值,而是存放被儲存數值的位址,屬於間接存放,所以不少初學者感覺學習困難。

比如表示將指標ptr指向變數a,存放a的位址,假設是2000h,而指標變數ptr本身也要有位址,假設是3000h,明顯 ptr和&ptr是不相等的,千萬不要搞混。常見用法:

ptr=&a; 指標ptr指向變數a

b=*ptr; 將ptr所指內容存入b,b=a

c=&ptr; 將ptr位址存入c,c與&a或&b明顯不同

2. *問題:*在指標部分有兩種用法,一是定義指標變數,比如 char *p;二是表示取指標變數所指的內容,比如char ch,*p; *p=ch;

&問題:&指取變數位址,比如 p=&ch;將指標指向ch,即p的值=ch變數的位址

3.指標與陣列問題:陣列的名字本身代表該陣列的首位址,要區分位址與數值之間的關係,比如char c[10], *p;

(1)p=c;表示指標p指向陣列c,相當於p=&c[0];c和&c[0]都是表示首位址

(2)c[0],c[1],...c[9]都是表示陣列中每個具體變數的值,前面加&才是其位址,與指標相連時,一般是p=&c[1]形式,只有指向c[0]時,才能省略為p=c

4.還有一些複雜的指標應用,比如指向指標的指標,或者指向函式的指標,那些更複雜,二級考試中很複雜的一般考的不多,建議將基本的學習好;這個東西要靠自己慢慢理解,理解了,其實簡單,不理解,很難,呵呵。

寫了不少,希望能對你的學習有所幫助,不對的地方,請海涵!

5樓:娛樂文風

30分鐘徹底學會c語言指標

6樓:匿名使用者

可以理解是相反的關係,&是取位址,而*是取位址裡的數,定義char *p ,就是定義了乙個指標變數,它是專門用來存位址的,p=&a[2], 就是先取陣列第三個元素的位址,然後賦給p,*p=&a[2],不對哦,兩邊型別不一樣,*p是乙個數值,就是取指標p位址裡面的數,而&a[2]是取第三個元素的位址,所以不能賦值哦。呵呵,指標這個比較複雜,你可以先看一下,譚浩強的c語言書,漫漫就會學會的

7樓:匿名使用者

c中的指標算是最難的一塊了。建議朋友指標和陣列一起學習。會更容易些。

8樓:邏輯錯誤

看看王爽的《組合語言》吧.

裡面講的很清楚.

可以這樣理解( 個人理解 ),任何乙個變數都是乙個位址.比如:0x12ff84等等.

以你的題目為例,

(注意:)p是乙個位址,這裡p=&a[2], 那麼p的位址就是a[2]的位址.

(注意:)*p=&a[2]就是p的位址裡面的值是a[2]的位址.

(警告:)這裡p的位址,p的位址可以是任何乙個變數的值.比如:

p=&a[2].如果你不給它值,那麼他就是個隨機的值,瞎雞b亂指,愛指哪兒就是哪兒.*p就不一樣了,*p=&a[2]就是系統給你的乙個可以用的位址,裡面存的是a[2]的位址所擁有的值.

初學者c語言指標問題

9樓:娛樂文風

30分鐘徹底學會c語言指標

10樓:璐人釔

這條語句沒啥問題

關鍵是*p2 = temp;有問題

應該是*p2 = *temp;

11樓:匿名使用者

void swap(int *p1,int *p2)

c語言指標問題 初學。

12樓:匿名使用者

你的p 是int 型別 而你的a 是char 型別 指標應該指向相同型別的資料

應該char *p=a申請4個位元組的空間存放陣列a 的首位址p是乙個變數 *p 是變數p申請4個位元組的空間存放位址 char *p 中的char 告訴p 乙個位元組的來讀取記憶體

如果是 int *p 就是4個位元組的來讀取記憶體不論是char *p 還是int *p double *p sizeof (p) 都是4 也就是說指標佔用4個位元組的記憶體空間

13樓:

#include "stdio.h"

main()

l=p-a+1;//這裡的p是指向'.'的!所以你得到的l是包括'.'在內的字元總數!

for(p=a;p

printf("%c",*p);}

14樓:娛樂文風

30分鐘徹底學會c語言指標

c語言初學 有關函式和指標的乙個問題?

15樓:最大的_大寶寶

function是乙個函式。f1是乙個函式指標,用於呼叫function。題目寫得有點複雜,簡化一下是這樣的,兩種呼叫方式都可以:

16樓:瀋陽_小凡

(*f1)就是function的函式。而且s是常量的指標,是不可以傳給變數指標的。

c語言指標的賦值問題

17樓:大野瘦子

指標在用要注意初始化,例如:

int *p;

p為指標,位址是未知的,如果直接賦值

*p=a;這樣編譯可以通過,但是會產生警告,p的位址是隨機分配的,這樣對未知的位址賦值很危險,可能會覆蓋掉某些重要資料,所以避免這種危險,在定義指標時注意初始化,也就是賦值。

可以int *p=&a;

或者int *p;

p=&a;

然後再對p進行操作

有錯。注意大小寫,還有

int a=9;

int *p;

p=&a;//這個是指標指向a

*p=8;

這樣就對了。

指標的賦值

int *p;

int a;

int b[1];

p = &a;

p = b;

指標的賦值,「=」的左運算元能夠是*p,也能夠是p。

當「=」的左運算元是*p時,改變的是p所指向的位址存放的資料;

當「=」的左運算元是p時,改變的是p所指向的位址。

陣列的變數名b表示該陣列的首位址,因此p=b;也是正確的

同型別的指標賦值:

int val1 = 18,val2 = 19;

int *p1,*p2;

p1 = &val1;

p2 = &val2;

p1 = p2;   //注意啦,p1指向了val2,而沒有指向val1

備註:字串與指標的初始化和賦值

初始化:

char *cp = "abcdefg"; //這個初始化過程,是將指標cp指向字串的首位址,而並非傳遞字串的值。由於,在c語言裡面,沒有總體處理乙個字串的機制

賦值:cp = "abcdefg";

*cp=」abcdefg」 ;//錯誤!字串常量傳遞的是它的首位址,不能夠通過*cp改動該字串的值,由於該字串為常量,而它僅僅是簡單的將指標指向該字串常量。

18樓:林聲飄揚

有錯注意:用指標變數前,必須對指標變數賦值如:int i, *p1;

p1=&i;

再如:int a, b;

int *p1, *p2;

*p1=10; *p2=100;

但指標變數未賦值,即指標指向未知位址,這樣是錯誤的因此:絕對不能對未賦值的指標變數作「指向」運算。

int a=9,b;

int *p=&b;//必須加上這一句

*p=a;

*p=8;

這樣就不會產生錯誤

19樓:匿名使用者

注意大小寫!還有

int a=9;

int *p;

p=&a;//這個是指標指向a

*p=8;

這樣就對了。

20樓:七先生是遊戲鬼才

這個還是比較複雜的,你可以學習一下

21樓:匿名使用者

p=&a//把a的位址給指標p

22樓:匿名使用者

語法上沒錯,但可能出現警告,破壞程式其他資料

23樓:渾濃強浩然

p就是乙個指標,他指向乙個位址,而&p就是p剛才所指向的具體位址,*p是p指向位址裡面的東西。也就是值。*p=&a的意思是把a的位址給了*p,這樣的話p就指向

(指向a的位址)的位址。對指標賦值必須是int*p=null;或者int

*p;p=null。

c語言關於指標入門學習中的小問題

24樓:匿名使用者

double *penter[20] 是指標陣列 ,即陣列中的元素是指向double元素的指標

*(penter+i) 等價於 penter[i]penter[i] = (double*)malloc(20); // malloc函式返回的是 指標型別 經過(double*)強轉後轉換成double型別指標 所以賦值的時候沒有問題

(penter+i) 等於 指向陣列第i個元素的位址

25樓:匿名使用者

penter是指所指單元格的位址,*penter是所指單元格的內容

(penter+i)是位址,(double*)malloc是內容

C 指標的問題,C語言指標問題

這麼說吧,指標是以後資料結構的基礎,比如單鏈表,雙鏈表,二叉樹等等等等,全部都時指標做的,還有1720次對於現在的計算機來說,是個很小很小很小的數量級。指標學好了受益匪淺,並且也是程式設計今後必須的。指標的確是可以大大提高效率,但是要看你怎麼用,就和遞迴演算法一樣,另外,顯示位址是你語句的問題。比如...

C語言指標問題

include void main printf how many rows?n scanf d m printf how many colum?n scanf d n printf the hightest score is d n max printf the student is d clas...

c語言指標問題

樓主你的 本身沒有錯誤。出現的是一些小問題。我勸告樓主一點,以後寫 要注意養成良好的習慣。在for語句裡面如果 不止一句的話建議加花括號。其他的一些同理。因為不這樣往往讓電腦產生歧義,從而無法正確得到想要的結果。一下 經過我執行過,確實能把陣列中數字守衛互換。希望對樓主有幫助。include std...