C基础--二重指针和数组指针

#include <stdio.h>

int main1(void)
{
    int a = 3;
    int b = 8;
    int *p = &a;  // int*  p = &a;
    int **q;        // int**  q;
    q = &p;
    **q = 10;
    *q =  &b;
    **q = 5;
    p = &b;
    *p = 9;

    printf("a = %d\tb = %d\n", a, b);

    return 0;
}

//void fun(char *arr[], int n)
void fun(char **arr, int n)        //二重指针传参时等价于指针数组
{
    int i;
    for (i = 0; i < n; i++)
        printf("%s\n", arr[i]);
        //printf("%s\n", *(arr+i));        //当成二重指针去索引元素
}
int main(void)
{
    char *s[3] = {"hello", "world", "xwp"};
    fun(s, 3);
    return 0;
}
#include <stdio.h>

int main1(void)
{
    int a[10] = {1,2,3,4,5,6,7,8,9,0};
    //int *p;
    int (*p)[10];    //先算小括号,p和*结合,属于指针类型,指针指向拥有10个int型元素的数组
    //p = a;        int *p; p = a;            a + 1
    p = &a;            //int (*p)[10] = &a;   &a + 1        p+1  加过40个字节

    printf("%d\t%d\n", sizeof(p), sizeof(*p));
    printf("%d\n", (*p)[3]);

    return 0;
}

int main2(void)
{
    /*
    char str[3][20] = {"hello", "world", "itcast"};
    char (*p)[20];

    p = &str[0];
    printf("%s\n", *(p+1));
    */
/*
    char str[3][20] = {"hello", "world", "itcast"};
    char *p;

    p = str[0];
    //printf("%s\n", p);
    printf("%s\n", (p+20));
    */
    char str[3][20] = {"hello", "world", "itcast"};
    char (*p)[20];
    p = str;
    printf("%s\n", *(p+1));
    return 0;
}
//void fun(char a[][20], int n)    //数组指针传参时等价于二维数组
void fun(char (*a)[20], int n)
{
    int i;
    for (i = 0; i < n; i++)
        scanf("%s", a[i]);
    return;
}
int main(void)
{
    int i;
    char s[3][20];
    fun(s, 3);
    for (i = 0; i < 3; i++)
        printf("%s\n", s[i]);

    return 0;
}
时间: 2024-08-29 06:46:34

C基础--二重指针和数组指针的相关文章

指针 指针与数组 指针与字符串 指针与函数 结构体与指针 宏

指针 指针与数组 指针与字符串 指针与函数?? 指针与数组 1.数组名:数组元素首地址 eg: int array[3]={1,3,6}; 这里array 恒等于&array[0] 2.int *p = a; int *p = 0; int a[]={0}; 3.int *p = a; 均指向数组的首地址 *p是? *(p+1)是?(*p)+1是? *(p+1)决定向下移动几个字节是类型 4.指针可以当数组名使用 p[1] = 3; 恒等于a[1] ;恒等于*(p+1);恒等于*(a+1) 5.

C专家编程之为什么C语言把数组形参当做指针:数组/指针实参

#include<stdio.h> void print_array_test(char ca[]) { printf("ca : %s\n",ca); printf("&ca : %s\n",&ca); printf("&(ca[0]) : %s\n",&(ca[0])); printf("&(ca[1]) : %s\n",&(ca[1])); printf(&qu

C++中的指针、数组指针与指针数组、函数指针与指针函数

C++中的指针.数组指针与指针数组.函数指针与指针函数 本文从初学者的角度,深入浅出地详解什么是指针.如何使用指针.如何定义指针.如何定义数组指针和函数指针,并给出对应的实例演示:接着,区别了数组指针与指针数组.函数指针与指针函数:最后,对最常混淆的引用传递.值传递和指针传递做了区处. C++中一个重要的特性就是指针,指针不仅具有获得地址的能力,还具有操作地址的能力.指针可以用于数组.或作为函数的参数,用来访问内存和对内存的操作,指针的使用使得C++很高效,但是指针也非常危险,使用不当会带来比较

复习一下整型数组,字符数组,整型指针数组,字符指针数组,整型数组指针,字符数组指针

20:52:01 2019-12-31 整型数组 int a[10];字符数组 char b[10]; _______________________整型指针数组 int *p[10]; |__|__|__|__|__|__|__|__|__| 每个格子里存的是一个指针,每个指针都是int类型的,会指向一个int的值. 1 for(int i=0; i<10; i++) 2 p[i] = &a[i]; //把a中的每个元素的地址都放在了指针数组p里. 3 4 for(int j=0; j&l

函数指针与数组指针与指针

1.接收return返回的数组元素 一般来说,是返回一个函数值,像一个int, double,char等类型的数据,当然也可以是他们的指针.但是当我们遇到要返回很多数怎么办呢?通常想到的是以数组的形式返回,下面就让我们来看看: 1.通过返回传入数组指针的方式:2.以指针变量作为函数参数,来实现数组的返回. 1. 首先我们来看看这种方法所涉及的知识:(1)指针函数.C语言中允许一个函数返回值是一个指针(地址)基本格式是: 基类型 * 函数名(参数列表)(2)静态变量与局部变量.我们知道C语言程序在

C++基础 (8) 第八天 数组指针 模板指针 C语言中的多态 模板函数

1昨日回顾 2 多态的练习-圆的图形 3多态的练习-程序员薪资 4员工管理案例-抽象类和技术员工的实现 employee.h: employee.cpp: technician.h: technician.cpp: source.cpp: 5员工管理案例-销售和经理实现 修改employee.h: displayStatus不用虚函数了 salesman.h: salesman.cpp: manager.h: manager.cpp: 6员工管理案例-销售经理的实现 7 中午回顾 注意: 多继承

指针与数组--指针与二维数组2

指向一维数组的指针   char (*p)[10] ;指向一维数组的指针类型 typedef  char(*TYPE_P2ARRAY)[10]  ;   该指针可以指向数组 ,且使用起来效果节本相同,但指针与数组并不等价.{sizeof结果不同  , 且该指针还可以指向除此之外其他类型的数据. } #include <stdio.h> typedef int (*TP_PARRY1)[3] ; #define Uart_Printf printf void f1(void) { int a[2

(0)c++入门——认识指针与数组——指针即是内存中地址。

初识指针 首先需要了解一个概念,计算机的内存(或者说是寄存器)都是有地址的. <c++ primer plus>一书P37中提到这样一个概念:为把信息存储在计算机中,程序必须记录3个基本属性: 1.信息将要存储在哪里 2.要存储什么值 3.存储何种类型的信息 而正是为了满足第一个属性,开发语言的设计者设计或者说定义了指针:用于描述信息(各种类型的数据如int.float.double等)在内存中的地址(位置).就好比酒店在设计之初也需要制定各个房间的编号是什么,这样更方便安排客户入住.如下图:

C专家编程之为什么C语言把数组形參当做指针:数组/指针实參

#include<stdio.h> void print_array_test(char ca[]) { printf("ca : %s\n",ca); printf("&ca : %s\n",&ca); printf("&(ca[0]) : %s\n",&(ca[0])); printf("&(ca[1]) : %s\n",&(ca[1])); printf(&qu