关于C语言二重指针的疑惑求解

问题描述

关于C语言二重指针的疑惑求解

程序如下,十分简短:
#include
void main(){
int a[3][4]={{1,2,3,4},{10,20,30,40},{100,200,300,400}};
printf("&a==%d
",&a);
printf("a==%d
",a);
printf("&a[0]%d
",&a[0]);
printf("a[0]==%d
",a[0]);
printf("&a[0][0]==%d
",&a[0][0]);

}
结果如下:

二重指针a的地址何其内容是一样的如何解释,一重指针“a[0]”内容和他自己所在地址是一样的如何解释

解决方案

1.a, &a, a[0], &a[0], a[0][0], &a[0][0], 编译器都会认为是数组a的起始地址;
2.虽然二重数组的地址可以强制转换成二重指针,但是二者还是有区别的,数组名不是一个变量,而指针是一个变量。

解决方案二:

二重指针
C语言 内存二重释放
C语言 int** 二重指针的理解

解决方案三:

C++的数组和指针

时间: 2024-09-17 04:50:06

关于C语言二重指针的疑惑求解的相关文章

指针-C语言单链表的插入求解了

问题描述 C语言单链表的插入求解了 对于带有头结点的链表,为什么在插入方法需要传入头指针的地址(二重指针)?对于不带头结点的链表,插入或者删除第一个元素时,需要使用头指针的地址,可是对于带头结点链表,为何要呢? 解决方案 解决方案二: C语言不像C++,没有引用参数,所以参数的形参被改变不能作用到实参上. 比如 void foo(int i) { i = 2; } int i = 1; foo(i); // i还是1 为此,需要指针: void foo(int* i) { *i = 2; } i

C语言字符串指针的一个小问题

问题描述 C语言字符串指针的一个小问题 题目如图,答案是又定义了一个指针变量做的.而我的答案编译出来结果也对,就是会运行结束之后出现一个警告对话框.不明白怎么回事,第三幅我的答案有什么问题吗?请问如果不用答案的那种编译方法,我的这种方法可不可行?能改进不报错吗? 解决方案 你的程序没有发现问题 #include <stdio.h> void fun(char * a) { int i = 0, j = 0; while (a[i] == '*') i++; for (; a[i] != '';

Android For JNI(五)——C语言多级指针,结构体,联合体,枚举,自定义类型

Android For JNI(五)--C语言多级指针,结构体,联合体,枚举,自定义类型 我们的C已经渐渐的步入正轨了,基础过去之后,就是我们的NDK和JNI实战了 一.多级指针 指针的概念我们在前面也讲了许多,也提到了多级指针的概念,那具体我们怎么去操作呢 #include <stdio.h> #include <stdlib.h> main(){ int i = 3; //一级 int* p = &i; //二级,保存一级指针 int** w = &p; //三

c语言-求问一个C语言字符指针的问题

问题描述 求问一个C语言字符指针的问题 #include void Initialize (char * a, char * b) { a[0] = 'T'; a[1] = 'h'; a[2] = 'i'; a[3] = 's'; a[4] = ' '; a[5] = 'i'; a[6] = 's'; a[7] = ' '; a[8] = 'A'; a[9] = ''; b = a; b[8] = 'B'; } #define ARRAY_SIZE 10 char a[ARRAY_SIZE];

c语言-双重指针定义动态二维数组

问题描述 双重指针定义动态二维数组 指针符号太多了 求解释每个指针符号 问:?二重指针 太多 求解释一下各个 p=(int **)malloc(sizeof(int *)*line); if(NULL==p) { return; } for(i=0;i<line;i++) { *(p+i)=(int *)malloc(sizeof(int)*row); if(NULL==*(p+i)) { return; } } 解决方案 首先我来看malloc做了什么,申请了一组空间,存放int型指针,返回这

c语言编程-C语言 oj 平台 runtime error 求解

问题描述 C语言 oj 平台 runtime error 求解 题:原文网址:http://vjudge.net/problem/viewProblem.action?id=19398输入:先输入一个数N,后每组2个(代表xy)输入N组数.(1<=N<=50)(-100<=xy<=100)输入0结束.输出:AB使得Ax+By!=0且Ax+By>0的数目与Ax+By<0的数目相同(-500<=AB<=500)如:Sample Input 2 -20 20 -3

c语言二级指针申请空间问题

问题描述 c语言二级指针申请空间问题 char **data; *data = malloc (100); 为什么段错误 应该怎么申请 解决方案 *data = malloc (sizeof(char *) * 100); for (int i = 0; i < 100; i++) { data[i] = malloc(sizeif(char)); } 解决方案二: **只申请两次.共1M左右内存 char **data=malloc(sizeof(char *)*100); data[0] =

c语言-C语言利用指针来存输入的字符串的问题

问题描述 C语言利用指针来存输入的字符串的问题 这个函数是可以得到str的: #include <ctype.h> char * getword(char * str) { int i; int ch; while ((ch = getchar()) != EOF && !isspace(ch)) *str++ = ch; *str = ''; if (ch == EOF) return NULL; else { while (ch != ' ') ch = getchar()

二维数组-关于C语言的指针数组的问题

问题描述 关于C语言的指针数组的问题 老师说过 传递一个二维数组时 必须指定 第二维的 个数 才能正确索引 数组1维+1的位置 函数参数传递 都是写成这样 abc(int* array[10]) 但是看到main函数的 参数确是 int main(int argc, char* argv[], char* env[]) 这样写 能索引argv+1 的位置吗? 解决方案 当然可以,C语言是一种简陋和原始的语言,它简陋的程度对于用惯了高级编程语言的人来说匪夷所思,比如你完全可以越界访问数组,至于结果