C程åºä¸­çš„指针

时间:2018-06-27 15:47:32

标签: c pointers

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]表示å个指针,但是会引å‘错误。

3 个答案:

答案 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);
}