c - 请举例帮助我更好地理解 C 中这些不同的类型声明?

标签 c pointers types

我总结了一些常见的 C 类型声明,现在我想知道一些可靠的例子,例如如何初始化它们以及如何使用它们。

一些示例已经给出,但还有一些仍在等待好的示例。

int p[3]; int *p[3]; int p[][3]; int (*p)[3]; int *(p[3]); int(*p[8])[5];

char p[3];字符 *p[3];字符p[][3];字符 (*p)[3];字符 *(p[3]); char(*p[8])[5];

int **p; char **p;

int p[3]; 
//p is array of 3 int.

示例:

int contestants[] = {1, 2, 3};

-

char p[3];
//p is array of 3 characters.

示例:

char cards[] = "JQK";

-

 int *p[3];
//p is array of 3 pointers to int.

示例:

int x = 1;
int y = 2;
int z = 3;
int *a1[3] = {&x, &y, &z}; //array of pointer to int
printf (" &x = %p, a1[0] = %p\n" , &x, a1[0]);
printf ("%d %d %d\n" , *a1[0], *a1[1], *a1[2]); //1 2 3

-

int p[][3];
//p is array of array of 3 int.

示例:

int data1[2][3] = { {1,2,3}, {4,5,6}};

-

char *p[3];
//p is array of 3 pointers to char.

示例:

char *juices[] = { "dragonfruit", "waterberry", "sharonfruit", "uglifruit",
"rumberry", "kiwifruit", "mulberry", "strawberry", "blueberry",
"blackberry", "starfruit" };
char *names_for_dog[] = {"Bowser", "Bonza", "Snodgrass"};

-

char p[][3];
//p is array of array of 3 char.

示例:

char tracks[][80] = { "I left my heart in Harvard Med School",
"Newark, Newark - a wonderful town", "Dancing with a Dork",
"From here to maternity", "The girl from Iwo Jima", };

-

int (*p)[3];
//p is pointer to array of 3 ints.

示例:

int data1[2][3] = { {1,2,3}, {4,5,6}};
int (*a2)[3] = data1;//pointer to int[3]
printf("%d %d\n" , a2[0][1], a2[1][2]);//2 6

-

char (*p)[3]; 
//p is pointer to array of 3 char.

示例: **********我需要一个很好的例子********************

-

int *(p[3]); is equivalent to int *p[3]; 
//p is array of 3 pointers to int.

-

char *(p[3]); is equivalent to char *p[3];
//p is array of 3 pointers to char.

-

int (*p[8])[5]; 
//p is array of 8 pointers to array of 5 ints.

示例:

int data2[3][4] = { {1,2,3,4}, {5,6,7,8}, {9,10,11,12}};
int (*a3[3])[4] = { &data2[0], &data2[1], &data2[2] };//array of pointer to int[4]
printf("%d %d %d\n" , (*a3[0])[2], (*a3[1])[0], (*a3[2])[3]);//3 5 12

-

char (*p[8])[5]; 
//p is array of 8 pointers to array of 5 char.

示例: **********我需要一个很好的例子********************

-

int **p;
//p is pointer to pointer to int

示例: **********我需要一个很好的例子********************

-

char **p;
//p is pointer to pointer to char

示例: **********我需要一个很好的例子********************

最佳答案

#include <stdio.h>

int main (void) {
    int x = 1;
    int y = 2;
    int z = 3;
    int *a1[3] = {&x, &y, &z};//array of pointer to int
    printf("&x = %p, a1[0] = %p\n", &x, a1[0]);
    printf("%d %d %d\n", *a1[0], *a1[1], *a1[2]);//1 2 3

    int data1[2][3] = { {1,2,3}, {4,5,6}};
    int (*a2)[3] = data1;//pointer to int[3]
    printf("%d %d\n", a2[0][1], a2[1][2]);//2 6

    int data2[3][4] = { {1,2,3,4}, {5,6,7,8}, {9,10,11,12}};
    int (*a3[3])[4] = { &data2[0], &data2[1], &data2[2] };//array of pointer to int[4]
    printf("%d %d %d\n", (*a3[0])[2], (*a3[1])[0], (*a3[2])[3]);//3 5 12
    return 0;
}

关于c - 请举例帮助我更好地理解 C 中这些不同的类型声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29426717/

相关文章:

µ Controller 上的 C 编程 : printf() and FDEV_SETUP_STREAM?

php - 如何使用 C 和 G-wan 网络服务器设置和读取 cookie

c++ - 递增数组变量时需要不一致的左值错误

c++ - C++ 中从二维数组中删除列

c - C语言结构化数据的两个编程问题

c - 插入到链表的开头(重新访问)

c - 为什么相同的变量打印不同的输出?

c++ - 让编译器假设 const primairy 类型为类?

python - 如何检查变量是 lambda 函数

c# - 可空通用声明?