本文目錄一覽:
- 1、c語言中(*p)[4]是什麼意思
- 2、int *p=4;**q; q=&p; 中&p和p分別代表什麼?**q怎麼理解?
- 3、C語言 指針 (*p)[4] 是什麼意思?怎麼用?
- 4、C語言中 int*p[4] 和 int(*p)[4]的區別
- 5、C語言數組指針的元素個數怎麼定義,為什麼是4?
c語言中(*p)[4]是什麼意思
int*p[4]是指針的數組,也就是說它是一個數組,數組裡存的是一個個的指針
int(*p)[4]是數組的指針,也就是說它是一個指針,指向的是一個數組。指針指向的類型會影響到指針加減運算時地址的位移。比如說有一個數組 int a[4],加上取址運算符 a,這個表達式的類型就是指向數組的指針,可以這樣賦值 p = a;。一般用於向函數傳遞二維數組的時候使用這種類型,這時還有一種更直觀的寫法
void matrix_sum(int matrix_a[][4], int matrix_b[][4]) {…}
這種寫法和
void matrix_sum(int (*matrix_a)[4], int (*matrix_b)[4]) {…}
是等價的。
int *p=4;**q; q=&p; 中&p和p分別代表什麼?**q怎麼理解?
在C語言中指針變量也是一個變量,它存在於內存之中,跟普通的int變量沒有什麼區別。
但是指針變量跟int變量的訪問方式有一點區別。
當你訪問int變量時,是直接取變量所佔內存中的值。
而當你使用*p訪問指針變量時,是先取p所佔內存中的值,把取出的值當作一個地址,然後再取出新地址的值作為最終值。
如下圖,假如p是int型的,那值就等於p。假如p是指針型的,值就等於x。
(圖畫的比較簡單)
| |
————
| |
| x |
| |-|
———— |
| |—
| p |
| |
————
| |
int **q;這句話聲明了一個指向指針變量的指針變量,見下圖,其中q是雙重指針變量,p是指針變量,z就是具體數據了。訪問過程請自己推一下吧(用上面的方法)。
q=p;其中p表示求出p這個指針變量的在內存中的地址,而q=p就表示把p的地址作為q這個雙重指針變量的值。
| |
————
| |
| z |
| |-|
———— |
| |—
| p |
| |-|
———— |
| |—
| q |
| |
————
| |
我可憐的圖啊,為什麼把中間的空格都給我刪除了?
C語言 指針 (*p)[4] 是什麼意思?怎麼用?
指向數組的指針,相當於一個二維數組
{
int (*p)[4];
int a[4];
p = a;
a[0] = 1;
printf(“%d\n”,p[0][0]);
}
C語言中 int*p[4] 和 int(*p)[4]的區別
一、結合性不同:
前者是指針數組,為4個int指針的數組,有4個元素;
後者是數組指針,為一個指針,類型為指向包含4個int類型元素的一維數組的指針。
二、含義不同:
int*p[4]是指針的數組,也就是說它是一個數組,數組裡存的是一個個的指針。
int(*p)[4]是數組的指針,也就是說它shu是一個指針,指向的是一個數組。
三、寫法不同:
一般用於向函數傳遞二維數組的時候使用這種類型,這時還有一種更直觀的寫法:
void matrix_sum(int matrix_a[][4],int matrix_b[][4]) {…}
這種寫法和void matrix_sum(int (*matrix_a)[4], int (*matrix_b)[4]) {…}是等價的。
擴展資料:
指針數組:如char *str_B[5] 系統至少會分配5個連續的空間用來存儲5個元素,表示str_B是一個5個元素的數組,每個元素是一個指向字符型數據的一個指針。如果定義如下數組:
char a[3][8]={“gain”,”much”,”strong”};
char *n[3]={“gain”,”much”,”strong”};
他們在內存的存儲方式分別如圖1所示,可見,系統給數組a分配了
3×8的空間,而給n分配的空間則取決於具體字符串的長度。
此外,系統分配給a的空間是連續的,而給n分配的空間則不一定連續。
參考資料來源;百度百科-指針數組
C語言數組指針的元素個數怎麼定義,為什麼是4?
int (*p)[4]是將p定義成了數組指針(即指向一維數組的指針)。
既然要指向一維數組,就得知道可以指向的一維數組的大小,[]中就是指定可以指向的一維數組的大小的。
而這裡4說明只能用p指向具有4個int元素的一維數組。
當然用p指向列大小為4的二維數組的某一行也是可以的,就像圖中一樣。
下面給個例子:
int a[4]={1,2,3,4};
int b[2][4]={5,6,7,8,9,10,11,12};
int (*p)[4];
//下面都可以
p=a;
p=b;
p=b+1;
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/151869.html