int *ptr[10];
int a[10]={0,1,2,3,4,5,6,7,8,9};
*ptr[3]=a;
printf("%d",*ptr[3]);
return 0;
我的问题是我想在a
数组ä¸æ‰“å°3ï¼Œå› ä¸ºint *ptr[10]
表示å个指针,但是会引å‘错误。
ç”案 0 :(得分:0)
如果è¦å°†æ•°ç»„a
的开头放在数组3
的数组ptr
çš„ä½ç½®ï¼Œåˆ™åº”在第3è¡Œä¸åˆ 除*
:>
ptr[3] = a;
æ¤å¤–,打å°å˜åœ¨ä¸€äº›é—®é¢˜ï¼Œæ‚¨å¯ä»¥åƒä¸‹é¢è¿™æ ·å†™å¾—更清楚:
printf("%d", ptr[3][0]); // will print the first value of array "a"
ç”案 1 :(得分:0)
基于您说您试图通过以下方å¼æ‰“å°â€œ 3â€çš„事实
printf("%d",*ptr[3]);
关于数组a
的定义,我认为您æ£åœ¨å°è¯•å°†*ptr
设置为a
的别å。
但是,在这ç§æƒ…况下,您会é‡åˆ°è¿ç®—符优先级问题:索引è¿ç®—符[]
的优先级高于解引用è¿ç®—符(*
ï¼‰ï¼Œå› æ¤*ptr[3]
çš„æ„æ€æ˜¯â€œæŒ‡å‘对象到ptr
çš„å…ƒç´ 3,而实际上想è¦çš„是“ ptr
指å‘çš„æ•°ç»„çš„å…ƒç´ 3â€ã€‚é‡æ–°é˜…读它们,直到您认识并ç†è§£å®ƒä»¬ä¹‹é—´çš„é‡è¦åŒºåˆ«ã€‚
但是问题ä¸ä»…ä»…é™äºŽè¿™ç§è¡¨è¾¾æ–¹å¼ã€‚相关的优先级问题éåŠï¼š
将声明一个指å‘å个int
数组的指针,如下所示:
int (*ptr)[10];
使用该声明,您å¯ä»¥é€šè¿‡ä»¥ä¸‹ç®€å•æ“作将ptr
分é…为指å‘a
:
ptr = &a;
完æˆæ¤æ“作åŽï¼Œå°†æ‰“å°æŒ‡å‘æ•°ç»„çš„å…ƒç´ 3,如下所示:
printf("%d", (*ptr)[3]);
或者,也许您的æ„æ€æ˜¯ä½¿ptr
本身(而ä¸æ˜¯*ptr
)æˆä¸ºa
的别å。在这ç§æƒ…况下,您需è¦ä¸€ä¸ªæŒ‡å‘å•ä¸ªint
的指针,而ä¸æ˜¯æŒ‡å‘数组的指针,当然也ä¸è¦æŒ‡å‘指针的数组:
int *ptr;
然åŽæ‚¨å¯ä»¥ç®€å•åœ°é€šè¿‡ä»¥ä¸‹æ–¹å¼åˆ†é…指针值
ptr = a;
。将ptr
建立为a
的别ååŽï¼Œæ‚¨å°±å¯ä»¥åœ¨printf
调用ä¸ä½¿ç”¨å®ƒäº†ï¼š
printf("%d", ptr[3]);
ç”案 2 :(得分:0)
您ä¸éœ€è¦ä¸€ä¸ªæŒ‡é’ˆæ•°ç»„å³å¯æŒ‡å‘一个数组。一个指针就å¯ä»¥äº†ã€‚所有这些都打å°â€œ 3â€
#include <stdio.h>
int main() {
int *ptr;
int a[10] = {0,1,2,3,4,5,6,7,8,9};
ptr = &a[3]; /* point to specific element */
printf("%d\n", *ptr);
ptr = a; /* point to whole array */
printf("%d\n", ptr[3]);
printf("%d\n", 3[ptr]); /* pointer arithmetic is weird */
return(0);
}