C語言指標問題,行指標的賦值與取值

2021-08-19 16:30:22 字數 3670 閱讀 3950

1樓:

1.p=a+1可以。表示p指向陣列a的第1行。

2.p=a表示p指向陣列a的第0行。

3.p=a.則*p是陣列a的首地址,這個地址型別是int *。

4.可以定義成(*p)[4],但不能p=a。因為它們型別不一致。

5 *p的值與型別與a[0]相等。

2樓:菜刀剁菜鳥

1. 正確

2.p=a是表示p指向陣列a的第0行;*p指a[0][0];對於a[2][3]不能將定義成(*p)[4]然後將a的地址賦給p指向;*p==a[0][0];(*p)[3]中的3是與a[2][3]相對的,你如果定義a[2][4]那麼這裡就是(*p)[4]

3樓:風之風信子

我本來打了詳細解答,結果只能輸出100個字,你要願意留個郵箱發過去。

int (*p)[3];p先和*結合,

這是一個指標!

然後p再和結合,指向的是陣列。

這個3的意思是這個指標指向的陣列的元素的是3個,明白了嗎?

4樓:

1 不可以 *p沒有初值

2 對的 指向第一行

定義的(*p)[4]和(*p)[3]這兩個是啥區別! 都是陣列,陣列個數不同

c語言指標賦值問題 20

5樓:gta小雞

請分清“指標本身的值”和“指標指向的地址中的值”這兩者的區別。指標本身的值就是地址。

int a = 2;

int *p = &a;

//p = 100; //試圖將指標本身的值修改為100,即令指標p指向記憶體地址100的位置,這是未定義行為

*p = 100; //將指標p指向的地址中的值修改為100,即將a的值修改為100

6樓:匿名使用者

int a =0, *p = &a;

*p = 100; 這個是合法的,修改指標指向記憶體空間內容。

int *p =4;直接把整數賦值給指標變數,由於地址4一般是非法地址,訪問的時候會出現問題,所以一般不會把數值賦值給指標。

7樓:扶明軒轅懋

&是一元運算,取變數地址的操作,間接訪問操作用運算子號*.&他返回運算元的記憶體地址,可以賦給型別合適的指標./

列如int

xint

*pxpx=&x

將x的記憶體地址賦給指標變數px,該賦值語句表示指標px制向變數x,

*運算子與&運算子剛好相反,它也是一遠運算子.用語返回指標指向的記憶體地址中存的值!

c語言指標的賦值問題

8樓:大野瘦子

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

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改動該字串的值,由於該字串為常量,而它僅僅是簡單的將指標指向該字串常量。

9樓:林聲飄揚

有錯注意:用指標變數前,必須對指標變數賦值如: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;

這樣就不會產生錯誤

10樓:匿名使用者

注意大小寫!還有

int a=9;

int *p;

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

*p=8;

這樣就對了。

11樓:七先生是遊戲鬼才

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

12樓:匿名使用者

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

13樓:匿名使用者

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

14樓:渾濃強浩然

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

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

*p;p=null。

關於c語言中指標操作字串和指標取值的問題

15樓:

問題一里,如果你想列印字串,printf第二個引數應該是地址而不是地址裡的內容,

如果你想列印一個字元,應該是%c而不是%s應該寫為printf("%s\n",(buf+1)); 或者 printf("%c\n",*(buf+1)); (輸出是e)

問題二和一應該是同樣的錯誤

printf("%s\n",p);是列印整個字串'test'

如果你只列印一個字元,比如s

printf("%c\n",*(p+2));

16樓:匿名使用者

printf輸出字串需要傳入的引數應是你想要開始的地址,把buf+1前面的解引用(*)去掉即可

*(buf+1)傳遞的是值應該用於輸出字元的情況,如printf("%c\n",*(buf+1));

第二個同理;

推薦一本c語言語法書,c prime plus ,對於這種基本語法解釋的相當清楚

c語言的賦值問題,C語言指標的賦值問題

上面的說法中,都存在錯誤或不足.1.首先 c a b 的意義是把 a 和 b 這兩個變數的內容 5 和 6 相加得 11,再把 11 這個結果值傳送至 變數 c 所在的儲存單元儲存起來 而不是你想像的 將 a 和 b 這兩個變數組合為一個變數作為 c,或者複製一份變數組合再作為 c.當你用int a...

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

這個演算法最後的時候 p和q都是指向a的,在最後這個時候a的結構是,q之前的是所有的除了版 之外權 的字元。q之後的都是原來a裡面的資料,對於這個時刻是髒資料。最後把q指向的那個位置賦值為 0可以在遍歷a的時候,不遍歷到髒資料,而這個時候p正好指向的就是 0,所以 q p 迴圈結束條件是 p 0,因...

c語言的行指標與元素指標有什麼區別

先舉個例子吧,先定義乙個二維陣列int a 3 4 陣列名a就是乙個行指標,a 0 就是乙個列指標 就拿這個例子說吧,a和a 0 雖然位址相同,可是指標指向型別卻不同,對指標進行 1運算,顯然得到的結果是不同的,因此a 行指標 1中的 1 代表一行中全部元素所佔的位元組數,而a 0 1,這裡的1則是...