當前位置:首頁 » 編程語言 » c語言數組名地址自加
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言數組名地址自加

發布時間: 2023-01-05 09:49:21

『壹』 c語言數組中引用時可以用自增符號嗎

數組不可以++
指針變數可以實現本身的值的改變。如char *p="abc"; p++是合法的;
而數組char arr[] = "abc"; arr++是錯誤的。因為arr是數組名,
它是數組的首地址,是常量,而指針時變數。 但是可以a[0]++;
自增運算符的操作對象要求是可修改的左值,但是數組名不是可修改的左值

『貳』 c語言 數組中自加是什麼意思比如:a[i++]=a;謝謝大家

a[i] = a;
i ++;
先把a賦值給數組a下標為 i 的 元素
把 i 自加 1 ;即指向下一個元素

++i
i++
前者是先自加再調用
後者是先調用再自加

『叄』 C語言 數組名 地址

數組名與指針有太多的相似,甚至很多時候,數組名可以作為指針使用。於是乎,很多程序設計者就被搞糊塗了。而許多的大學老師,他們在c語言的教學過程中也錯誤得給學生講解:"數組名就是指針"。這種誤解的根源在於國內某著名的c程序設計教程(出版量最多的那本破書)。
數組名的內涵在於其指代實體是一種數據結構,這種數據結構就是數組;數組名的外延在於其可以轉換為指向其指代實體的指針,而且是一個指針常量;指向數組的指針則是另外一種變數類型,僅僅意味著數組的存放地址!
sizeof(a)為什麼等於40呢,因為數組這種結構保存了數組的大小,有的書說這個值保存在數組首地址前面的內存中(這一點,我沒驗證)。最簡單的方法你就記著,數組名不是普通的指針。

『肆』 請問一下,c語言中數組自增是什麼意思啊 例如a[i]++

int
a[12]={0},
數組a包含12個元素,全為0
*p[3],
指針數組
**p,i;
指向指針的指針和變數i
for(i=0;i<3;i)應該為for(i=0;i<3;++i)
循環
p[i]=&a[i*4];
意思是p[i]的值為a[i*4]的地址,這里p[i]是指針
也就是
p[0]指向a[0]地址
p[1]指向a[4]地址
p[2]指向a[8]地址
pp=p;pp指向指針數組p的地址
pp是指向指針的指針,p是指針數組,所以p也是指向指針的指針,可以pp=p

『伍』 C語言 數組 字元數組 自加問題

上面說的挺好的, 不過可能好像還有個問題沒有說, 我再補充下吧..

int a[10];
a是一個數組的首地址, 他是一個常量指針, 其值是不能改變的, 如果你想通過移動指針來取數組的下一個元素, 可以這樣來做:

int* ptr = a;//聲明一個int類型的指針指向數組的首地址;

*(++ptr)取到的是a[1], 注意, 如果寫成*ptr++, 雖然++的優先順序高於*,但是p++具有滯後性, 也就是ptr先進行完操作(*ptr操作), 在使其值加1, 也就是說*ptr++取到的還是a[0]的值...

"字元數組自加和數組自加效果一樣嗎?"這句沒怎麼看懂,字元數組也是數組啊, 當然效果一樣...當然這里你說的數組自加也許說的是讓數組名++, 上面說了, 數組名是不能進行++操作的...

關於第二個問題
字元數組gets(ch[i])這個很難說對錯, 要看具體情況, 如果ch[i]的值是一個指向一段內存的首地址, 這樣是可以的(當然輸入的字元數要小於這段內存的總長度 - 1), 比如:

#define MAX_LEN 20
char* ch[5];

for(int i=0; i<5; i++)
{
ch[i] = (char*)malloc(MAX_LEN * sizeof(char));
gets(ch[i]);
}

但如果ch[i]只是一個字元, 比如:

char ch[10];
gets(ch[1]);

這樣估計編譯也過不了...

『陸』 C語言數組的地址

其實你這個疑問是概念上的混淆,或者說對指針了解上上的欠缺

首先講int a[3] = {2,3,4};
這里的a是這個數組的首地址,比如定義如:int *p = a;這時如果你進行如下操作:
p++;
printf("%d\n",*p);
結果會是輸出2,也就是說p+1相當於數組索引加1,但是像你所問的為什麼&a和a是相同的 ,首先要知道他們分別代表什麼意思,a:像上面所說的是數組的首地址,做自加運算會根據數組類型來計算偏移量,那麼&a是什麼東西呢,實際上它也是一個指針,是指向一個具有3個元素的數組的指針,如何理解,看以下定義:

如果你定義int *q = &a;這時編譯器肯定報錯,繪制出數據類型不一致,那麼你這樣樣定義就沒有問題:int (*q)[3] = &a;這時如果你再對q進行++操作,那麼加的就不同了,如相面的p++操作後p的值會加4,而這里q++操作後的值會加12,也就是跳過3個數組元素,然而,確實這兩個指針的初始值是一樣的,只是類型不一樣而已,這對二維數組的訪問時很方便的,這個你可以參照2維數組得到進一步理解,講的有點亂,不知道你能不能理解

『柒』 C語言的數組名可以加取地址符嗎例如int a[2],然後輸出&a,好像在哪裡看見過,但是覺得意義

可以加取地址符,但是a就表示&a[0],沒必要。

『捌』 C語言,地址,指針,自加問題

其實*P++你要這么看,首先判斷*的優先順序大於++;其次p++的意思是先使用當前的p值然後再做
p=p+1;兩個因素聯系起來這句話就這么理解:先取p指針的內容;然後p指針再做後移指向數組的下一位元素,所以這句話相當於:*p;p=p+1;
第二個問題其實也大同小異,我同樣可以用同樣的方法把*p++=*(p-2)+*(p-1);分為下面幾句話

首先:*p=*(p-2)+*(p-1);p++;

也就是先把前兩項的值賦給當前數組元素;然後p++;指針後移,循環賦值直至所有的數組元素被賦值這就是你看到該語句在for循環里的原因。

希望我的回答對你有幫助!

『玖』 c語言編程輸入時為什麼一維數組要加地址符,字元數組就不用呢

因為字元數組,數組名本身就是指一個地址。

定義了字元型數組char name[10]。name有兩個含義:一個是代表著name這個數組第一個位置的地址,也就是name[0]的地址。可以說name就等價於&name[0]。

還有一種意思就是指代name整個數組。&name 就是整個數組的首地址。所以name和&name取得的地址是相同的。

(9)c語言數組名地址自加擴展閱讀

name和&name區別:

不同點在於:name+1表示的是數組第二個元素的地址,而&name+1表示的是整個數組後又一個name數組的首地址,即&name[10]後一個新的name數組的首地址。例如:

#include<stdio.h>

int main(void)

{

char name[10]={"hello csdn"};

printf("name+1的地址:%p ",name+1);

printf("&name+1的地址:%p ",&name+1);

return 0;

}

所以說scanf("%s",name);和scanf("%s",&name);執行後的結果是一樣的,都是name的首地址,都是給字元數組name賦值。推薦用 scanf("%s",name); ,第二種不容易理解也容易犯錯,有些編譯軟體也不支持會報錯。