『壹』 c語言數組指針的輸出問題,問題在代碼注釋中
明顯出問題了。++和--後置的問題,其塌戚實你代碼寫錯了,循環終止條件應該是i<sizeof(a)/4;
所以你的代碼應氏衫型該"走"字在第一個循環中列印不出來的;如果你用i<sizeof(a)/4,那麼指針越界指向了;原因就是你殲猜++後置了,列印出最後一個"走"後還是執行++;
就是這個原因造成了第二個循環第一趟循環灰亂碼!
『貳』 C語言 指針 數組 定義
指針在定森畝差義的時候,前面的*表示其類型為指針,而不是用於取此皮內容。
定義的同時賦值,uchar *p=Number; 這樣是可以的耐陪。
下面這樣才是錯誤的:
uchar *p;
*p=Number;
『叄』 C語言中關於指向數組的指針
char str[100];
char *pi=str; //相當於char *pi ;pi=str;
char **ppi=*pi;//這個地方抄錯了。應為char **ppi=&pi;
定義加*表明這是指針類型的變數
用的時候,就是用的指針,加*干什麼。
只有取指針所指變數的值,或給指針所指的變數賦值的等涉及指針所指的變數的時候,
才會又加*號,表示獲取或改變,指針所指變數的值。
char x=10;
*pi =x; //給指針所指的變數賦值,改變指針所指變數的值(改變*pi) 。
x=*pi; //取指針所指的值,取指針pi所指的變數的值(表示為*pi)賦值給x。
『肆』 請問C語言的指針數組到底是什麼可以簡單易懂地詳細解釋一下嗎最好有例子
一個數組,它的每一個元素都是一個指針。
如果每個指針指向一個字元串猜帆棗首地址,就可以指向很多字元串。
如果每個指針指向一個函數的入口地址,就威力穗拆無轎配比。
『伍』 C語言中的指向數組的指針怎麼理解
指針的工作是通過數組在內存的地址來實現的。指向數組的指針。。。有幾種表示的比擾沒如p=&a;a是數組名慧漏,p是指緩碧納針;像上面的是表示p是指向a數組首地址的一個指針
『陸』 C語言中的指針數組是什麼意思我對這個概念很混亂,指針數組的定義,作用,使用。
指針數組:就是存儲指針的數組。
數組指針:就是指向數組的指針。
指針:本質就是一個int型變數,含義:一個內存地址。
舉例:
int *p[10] 指針數組。原因:因為[的優先順序比*高,p先和[結合,所以是指針數組。等同於
int* p[10].
int (*p)[10] 聲明了一個指針P,指向有10個元素的數組。
如果 int* p;就是聲明了一個指向int變數的指針P。同理。int (*p)[10] 聲明一個指向int[10]的數組。
『柒』 C語言中,如何定義一個『指針數組』,這個『指針數組』專門用來存放『數組指針』。
指針數組定義int*p[n];
[]優先順序高,先與p結合成為一個數組,再由int*說明這是一個整型指針數組,它有n個指針類型的數組元素。這里執行p+1時,則p指向下一個數組元素,
這樣賦值是錯誤的:p=a;因為p是個不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它們分別是指針變數可以用來存放變數地址。但可以這樣*p=a;這里*p表示指針數組第一個元素的值,a的首地址的值。
數組指針定義int(*p)[n];
()優先順序高,首先說明p是一個指針,指向一個整型的一維數組,這個一維數組的長度是n,也可以說是p的步長。也就是說執行p+1時,p要跨過n個整型數據的長度。
如要將二維數組賦給一指針,應這樣賦值:
int a[3][4];
int(*p)[4];//該語句是定義一個數組指針,指向含4個元素的一維數組。
p=a;//將該二維數組的首地址賦給p,也就是a[0]或&a[0][0]
p++;//該語句執行過後,也就是p=p+1;p跨過行a[0][]指向了行a[1][]
(7)C語言指針數組注釋擴展閱讀:
與數組指針關系
數組指針是指向數組首元素的地址的指針,其本質為指針(這個指針存放的是數組首地址的地址,相當於2級指針,這個指針不可移動);指針數組是數組元素為指針的數組,其本質為數組。
例如:*p[2]是指針數組,實質是一個數組,裡面的兩個元素都是指針,[]的優先順序比*的優先順序高,p先與[]結合,形成數組p[2],有兩個元素的數組,再與*結合,表示此數組是指針類型的,每個數組元素相當於一個指針變數
與二維數組對比
二維數組:如char string_1[10][10]只要定義了一個二維數組,無論賦不賦值,系統都會給他分配相應空間,而且該空間一定是連續的。其每個元素表示一個字元。我們可以通過指定下標對其元素進行修改。
指針數組:如char*str_B[5]系統至少會分配5個連續的空間用來存儲5個元素,表示str_B是一個5個元素的數組,每個元素是一個指向字元型數據的一個指針。
如果我做這樣的定義:
char a[3][8]={"gain","much","strong"};
char*n[3]={"gain","much","strong"};
他們在內存的存儲方式分別如右圖所示,可見,系統給數組a分配了
3×8的空間,而給n分配的空間則取決於具體字元串的長度。
此外,系統分配給a的空間是連續的,而給n分配的空間則不一定連續。
由此可見,相比於比二維字元數組,指針數組有明顯的優點:一是指針數組中每個元素所指的字元串不必限制在相同的字元長度;二是訪問指針數組中的一個元素是用指針間接進行的,效率比下標方式要高。但是二維字元數組卻可以通過下標很方便的修改某一元素的值,而指針數組卻無法這么做。
舉例編輯
數組指針:
#include<stdio.h>
int main()
{
char c[][4]={"哥","哥","我","岸","上","走"};//UTF-8:一個漢字=3個位元組
char(*p)[4];
int i;p=c;//將指針定位於c[0]
for(i=0;i<=5;i++)
{
printf("%s,",*(p+i));//或者將*(p+i)替換成*p++
}
printf(" ");
for(i=5;i>=0;i--)
{
printf("%s,",*(p+i));//或者將*(p+i)替換成*--p
}
return 0;
}
指針數組:
#include<stdio.h>
int main()
{
int i;
char*pch[6]={"妹","妹","你","坐","船","頭"};
for(i=0;i<6;i++){
printf("%s,",pch<i>);
}
printf(" ");
for(i=5;i>=0;i--){
printf("%s ",pch<i>);
}
return 0;
}
『捌』 c語言中數組指針的表示方法
(*k)[3]意為指向包含三個整形元素的一位數組;
*k[3]意為一個數組,數組的每個元素都是一個指針
以下為實例:
#include <stdio.h>
#include <conio.h>
void main(void)
{
int (*p)[3];
int a[2][3]={1,2,3,4,5,6};
p=a;
//假設我們想輸出第二行,第三個
printf("%d",*(*(p+1)+2));
getch();
}
#include <stdio.h>
#include <conio.h>
void main(void)
{
int *p[3];
int a=0,b=1,c=2;
p[0]=&a;
p[1]=&b;
p[2]=&c;
printf("%d,%d,%d",*p[0],*p[1],*p[2]);
//輸出結果為 0,1,2
}
不懂再問
『玖』 c語言多維數組指針求解 希望高手每行注釋一下 謝謝
#include
"stdio.h"
void
main()
{
int
a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
//
定義一個3行4列的二維數組
printf("%d,",a);
//
輸出數組a
的首地址
printf("%d,",*a);
//
同上
printf("%d,",a[0]);
//
把a[0]看成一個數組名,則a[3][4]就相當於一維數組了,所以也是首地址
printf("%d,",&a[0]);
//同上
printf("%d\n",&a[0][0]);
//
a[0][0]是值,所以&a[0][0]也是取首地址
printf("%d,",a+1);
//
第一行的首地址
printf("%d,",*(a+1));
//
同上(理由跟輸出a[0]差不多)
printf("%d,",a[1]);
//
同上
printf("%d,",&a[1]);
//
同上
printf("%d\n",&a[1][0]);
//
同上
printf("%d,",a+2);
//
這些都跟a+1以下的一樣的原理
printf("%d,",*(a+2));
printf("%d,",a[2]);
printf("%d,",&a[2]);
printf("%d\n",&a[2][0]);
printf("%d,",a[1]+1);
printf("%d\n",*(a+1)+1);
printf("%d,%d\n",*(a[1]+1),*(*(a+1)+1));
}
『拾』 C語言 指針與數組的詳解及區別
數組名是數組的常量指針,區別就是常梁逗量與變數,數組名是不可以修改(只能是本數組的地址)的,而指針則可以重新賦值(橡毀賣指向的新的余備變數)。