⑴ c語言選擇題,關於指針數組。求詳解
int a[2][3]; 定義了一個二維函數,每一維數組有三個元素。
int (*pt)[3]; 定義了一個數組指針,也就是定義了一個指向有三個元素的指針,即該指針,每次自加1,地址跳過三個int
pt=a; 就是讓pt指向a[0],注意a[0]是一個數組地址,裡面有三個元素
對於A選項,pt[0][0]是正確的,pt[0][0]等價於a[0][0]
對於B選項,不正確,因為pt+1就是a[1], *(pt+1)[2]相當於a[3][0]不對。
因為運算符優先順序,[]大於*,因此*(pt+1)[2]就是*pt[1+2] 也就是*a[1+2]。而*a[3]就等價於a[3][0]。越界了
改成(*(pt+1))[2]就對了,相當於a[1][2]
對於C選項,正確,*(pt[1]+2) 相當於a[1][2]
對於D選項,正確,*(a[0]+2)相當於a[0][2]
⑵ c語言選擇題(指針)
答案是A,首先定義p是一個指向int類型的指針,不過這個指針沒有初始化,也就是沒有指向。然後定義了一個int類型的變數i,這里千萬不要認為i也是個指針,如果i跟p一樣,要在前面也加個*號。
然後分析答案: A,這里對p指向的變數進行賦值,這里是相當於初始化了。所以正確。
B,不正確/不合理,因為p的地址不確定,所以給i賦值賦的是地址值,這個地址本身就不確定,賦值沒有意義,認為是不合理的。
C,不正確,因為p指向的位置未知,這里不能對p進行解引用取值,所以這個答案可以馬上排除。
D,也不正確,這里p是個地址,沒有對地址進行乘法和加法的運算,所以這個答案也可以馬上排除。
⑶ C語言求教高手 關於指針的選擇題
int a,*p,*q,p=q=&a;這句錯了,你沒看出來???
主意*q後面是個逗號,不是分號,你前面定義的p是一個指針,後面有定義p是一個int型變數,定義不一致啊,必然錯了;所以只有4是對的,當然選D了
⑷ 一道C語言關於字元串和指針的選擇題
A.
str1指向的是12345+'\0'這6個位元組
str2指向的是abcdef+'\0'這7個位元組
我們假設緊接著str1的6個位元組的後面,存有一個別的變數str3,
那麼如果把7個位元組拷貝到6個位元組的位置,多出來的那個位元組就會影響到後面的str3。
B.
str[10]在建立以後,實際上已經存有東西了,只是一些系統的亂碼,你可以列印它試試
所以如果使用strcat進行連接,實際上是從那些亂碼的後面開始連接的,
然後就會出現A裡面那個問題,連接完的字元串超出了str的范圍了
C.
str[10]=""說明現在str裡面沒有東西,所以連接st的時候,是從str[0]開始連接的。
str的空間足夠放入st的那些字元,所以OK~
D.
這個和上面的問題是一樣的
PS:一樓的回答。。有些問題哈。。。。